使用许多参数编译case类会导致java.lang.StackOverflowError

时间:2017-10-27 23:33:59

标签: scala

我有以下具有大量参数的案例类(150)在使用sbt(版本0.14)编译期间导致java.lang.StackOverflowError异常:

类定义:

case class TestClass(Param1:String,Param2:String,Param3:String,...,Param150:String)

sbt编译期间的异常:

[info] Compiling 1 Scala source to C:\spark-2.2.0-bin-hadoop2.7\ImportSyncPuffDataApp\target\scala-2.11\classes...
java.lang.StackOverflowError
        at scala.tools.nsc.typechecker.Contexts$Context.bufferErrors(Contexts.scala:332)
        at scala.tools.nsc.typechecker.Contexts$Context.reportErrors(Contexts.scala:333)
...
        at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680)
        at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4524)
[error] (compile:compileIncremental) java.lang.StackOverflowError

如果将参数数量减少到115,则可以正常工作。我该如何解决这个限制?

2 个答案:

答案 0 :(得分:0)

通过添加以下内容来提供更大的jvm堆栈空间(默认为1M):

-Xss2M

在Windows平台上,它应该在%SBT_HOME%\conf\sbtconfig.txt

答案 1 :(得分:0)

使用sbt命令行(通过JVM参数)增加堆栈大小:

sbt -J-Xss2M -J-Xmx2G