如何在编译一个未捕获异常的scala项目时增加堆栈大小:java.lang.StackOverflowError



当使用eclipse编译play2.1 scala项目时,我得到的错误为

[error]编译过程中未捕获的异常:java.lang.StackOverflowError

(错误)(编译:编译)java.lang.StackOverflowError

我试图在application.conf中配置编译器,添加以下行:

jvm。内存=-Xmx5g -Xms5g -Xss8192M

(我的程序也需要大量的堆空间,所以我还添加了xmx和xms)

但它不工作…

我该如何解决这个问题?

很奇怪,你得到一个StackOverflow。看起来确实像个虫子。但是,如果您确实没有足够的堆栈空间,那么修改application.conf将无济于事。这些设置控制应用程序的运行时参数,而您的问题是在编译时。

这个SO答案显示了如何为SBT调整JVM参数:执行升降机项目时使用SBT出现内存不足错误

在您的情况下,您将修改play分发文件夹中的play文件,并在那里添加堆栈特定选项(play实用程序只是一个自定义的sbt版本)。

您的异常可能是由于编译器中的错误,而不是堆栈大小不足。

[error] uncaught exception during compilation:java.lang.StackOverflowError
[error] (compile:compile)java.lang.StackOverflowError

它们看起来像是来自代码中的错误。仔细检查那里是否有问题。通常的SBT问题是或java.lang.OutOfMemoryError: PermGen space,在这种情况下,使用@Marius Danila的答案来解决问题。

最好的方法是对你的方法进行单元测试。Play使用JUnitSelenium。看看这里,用单元测试再次检查你的逻辑。

现在工作了,当我把所有东西都移回旧版本:scala 2.9.1或2.9.2都工作得很好,编译时没有堆栈溢出;播放版本为2.0.4

最新更新