StackOverflowError with Scala on IntelliJ

2022-09-02 09:01:23

我正在尝试使用Gradle在IntelliJ上构建一个Scala项目。我能够使,但编译不断失败,堆栈溢出错误。

我查看了其他具有类似问题的帖子,这些帖子建议增加堆/堆栈大小(这个这个)。到目前为止,我已经尝试在JAVA_OPTS和idea64.exe.vmoptions中设置这些。

-Xss512m -Xms512m -Xmx2048m -XX:保留代码缓存大小=64m -ea

我还尝试包含-XX:MaxPermSize=2048m,这也不起作用(相信Java 8无论如何都不支持它)。

为具有相同配置的另一个人生成相同的代码。任何人都可以澄清一下我错过了什么吗?

详:

IntelliJ Ultimate 2016.1
Scala 2.10.3
Java 1.8.0_92

堆栈跟踪:

java.lang.StackOverflowError
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4522)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4578)
    at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5343)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5360)
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5472)
    at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5480)
    at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:642)
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4522)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4578)

答案 1

例外情况来自 IntelliJ 使用的编译器,因此您需要更改编译器构建过程的堆大小。转到(G)

File -> Settings -> Build, Execution, Deployment -> Compiler -> Build process 
heap size (Mbytes)

将此属性增加到更高的值。

Screenshot showing the settings pane increasing the value to 1024 MBytes


答案 2

我通过以下方式解决了这个问题:

首选项 -> 构建、执行、部署 -> 编译器 -> Scala 编译器 -> Scala 编译服务器

并更新了JVM选项以使用更大的堆栈大小,例如:-Xss8m

重新启动以使更改生效。


推荐