如何防止java.lang.OutOfMemoryError:PermGen的空间在斯卡拉编译?如何

2019-05-13 09:59发布

我注意到我的Scala编译器的一个奇怪的行为。 它编译一个类时,偶尔会抛出一个OutOfMemoryError。 这里的错误信息:

[info] Compiling 1 Scala source to /Users/gruetter/Workspaces/scala/helloscala/target/scala-2.9.0/test-classes...
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space

它只是在一段时间发生的一次错误通常不扔在后续编译运行。 我使用Scala的2.9.0,并通过SBT编译。

没有任何人有一个线索,以什么可能是这个错误的原因是什么? 在此先感谢您的见解。

Answer 1:

针对病因OutOfMemoryError: PermGen space是,它没有足够的持久代空间 :)如果你使用的是Oracle JVM,您需要将添加-XX:MaxPermSize=256M (或空间的一些其他金额)参数传送给sbt脚本。 对于其他JVM,看看他们的文档。



Answer 2:

我使用自制软件安装在OS X SBT它支持SBT_OPTS可以放在论证~/.sbtconfig文件与export SBT_OPTS=-XX:MaxPermSize=256M



Answer 3:

我假设你正在使用SBT 0.13.6或更高。 创建.sbtoptsSBT项目具有以下内容的根文件:

-J-Xmx4G
-J-XX:MaxMetaspaceSize=1G
-J-XX:MaxPermSize=1G
-J-XX:+CMSClassUnloadingEnabled

MaxMetaspaceSize是Java 8,而MaxPermSize是Java 7。他们是至关重要的,以防止无论是PermGen的或耗尽元空间中有关内存不足错误。 当然,考虑改变标志值或添加所需的任何其他标志。

更多详细信息和替代方法都可以在此找到博客文章 。



Answer 4:

我有这个问题,发挥与它周围10分钟看试图改变内存大小网站。

原来我解决它通过,

user-profile$ sbt

然后,

sbt-project-name 0.1> clean

这清除它适合我。



Answer 5:

它看起来像在SBT内存泄漏对我来说在我的案件的程序编译和运行成功约3-5次打击是由SBT重启固定异常之前。

最合适的解决方案确实似乎是-XX:MaxPermSize= JVM参数作为阿列克谢·罗曼诺夫建议或者定期重新启动SBT是否有帮助。

但还有另一种有趣的方法:尝试切换到Java的8 。 AFAIK它不使用任何PermGen的更多,可能是不受此异常这种方式。

我还是希望SBT作者将在未来的版本中解决这个问题。



Answer 6:

我对詹金斯SBT插件构建和有同样的问题。 他们从SBT文件到詹金斯工作配置的JVM标志复制SBT_OPTS后得到解决。



Answer 7:

最初使用像这样的命令:

java -jar /path/to/sbt-launch.jar test

我得到了第一的OutOfMemoryError:PermGen的空间 ,我用解决-XX:MaxPermSize ,然后OutOfMemoryError异常:Java堆空间 ,其中-Xmx是补救。

所以在我的情况下,这样的命令工作:

java -XX:MaxPermSize=256M -Xmx2048M -jar /path/to/sbt-launch.jar test


Answer 8:

更改下面的代码块sbt.sh文件,并保存其工作的罚款。

get_mem_opts () {
  local mem=${1:-1536}
  local perm=$(( $mem / 4 ))
  (( $perm > 256 )) || perm=1024 //256 to 1024
  (( $perm < 1024 )) || perm=2048 // 1024 to 2048
  local codecache=$(( $perm / 2 ))

  echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"
}

要么

使用终端导出SBT配置

export SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:PermSize=1024M -XX:MaxPermSize=2048M"


文章来源: How to prevent java.lang.OutOfMemoryError: PermGen space at Scala compilation?