【问题标题】:How to increase stack size when compiling a play scala project with uncaught exception during compilation: java.lang.StackOverflowError如何在编译期间编译带有未捕获异常的 play scala 项目时增加堆栈大小:java.lang.StackOverflowError
【发布时间】:2013-03-26 00:56:06
【问题描述】:

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

[error] 编译期间未捕获的异常:java.lang.StackOverflowError

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

我尝试通过添加以下行来配置 application.conf 中的编译器:

jvm.memory=-Xmx5g -Xms5g -Xss8192M

(我的程序也需要很多堆空间,所以我也加了xmx和xms)

但它不起作用..

我该如何解决这个问题?

【问题讨论】:

  • 真的,一场比赛需要 8 GB 的筹码量!应用程序?所以你有类似 TB 的可用内存?
  • 没有,我只有64G内存。我用8g做测试,因为堆栈溢出问题让我很恼火。

标签: scala playframework


【解决方案1】:

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

这个 SO 答案显示了如何调整 SBT 的 JVM 参数: Out of Memory Error Using SBT When Executing Lift Project

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      [error] uncaught exception during compilation:java.lang.StackOverflowError
      
      [error] (compile:compile)java.lang.StackOverflowError
      

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

      最好的办法是对您的方法进行单元测试。为此,Play 使用 JUnitSelenium。查看here 并使用单元测试仔细检查您的逻辑。

      【讨论】:

        【解决方案4】:

        现在一切正常,当我将所有内容移回旧版本时:scala 2.9.1 或 2.9.2 一切正常,编译时没有堆栈溢出;播放版本是2.0.4。

        【讨论】:

          猜你喜欢
          • 2011-04-03
          • 2019-07-16
          • 1970-01-01
          • 2015-07-08
          • 2013-09-25
          • 2017-10-23
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          相关资源
          最近更新 更多