如何预防 java.lang.OutOfMemoryError: PermGen 空间?

我经常得到
OutOfMemoryError

经过 SBT.


> test
[error] java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
[error] Use 'last' for the full log.
> last
[debug] Running task... Cancelable: false, check cycles: false
[debug]
[debug] Initial source changes:
[debug] removed:Set//
[debug] added: Set//
[debug] modified: Set//
[debug] Removed products: Set//
[debug] Modified external sources: Set//
[debug] Modified binary dependencies: Set//
[debug] Initial directly invalidated sources: Set//
[debug]
[debug] Sources indirectly invalidated by:
[debug] product: Set//
[debug] binary dep: Set//
[debug] external source: Set//
[debug] Initially invalidated: Set//
[debug] Copy resource mappings:
[debug]
[debug]
[debug] Initial source changes:
[debug] removed:Set//
[debug] added: Set//
[debug] modified: Set//
[debug] Removed products: Set//
[debug] Modified external sources: Set//
[debug] Modified binary dependencies: Set//
[debug] Initial directly invalidated sources: Set//
[debug]
[debug] Sources indirectly invalidated by:
[debug] product: Set//
[debug] binary dep: Set//
[debug] external source: Set//
[debug] Initially invalidated: Set//
[debug] Copy resource mappings:
[debug]
[debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present.
[debug] Framework implementation 'org.specs.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.scalatest.tools.ScalaTestFramework' not present.
[debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present.
[debug] Subclass fingerprints: Stream//org.specs2.specification.SpecificationStructure,false,org.specs2.runner.Fingerprints$$anon$1@34d6488c/, ?/
[debug] Annotation fingerprints: Stream//
[debug] Running Test ExpandoObjectTest : subclass/false, org.specs2.specification.SpecificationStructure/ with arguments
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet/FutureTask.java:252/
at java.util.concurrent.FutureTask.get/FutureTask.java:111/
at sbt.ConcurrentRestrictions$$anon$4.take/ConcurrentRestrictions.scala:196/
at sbt.Execute.next$1/Execute.scala:85/
at sbt.Execute.processAll/Execute.scala:88/
at sbt.Execute.runKeep/Execute.scala:68/
at sbt.EvaluateTask$.run$1/EvaluateTask.scala:162/
at sbt.EvaluateTask$.runTask/EvaluateTask.scala:177/
at sbt.Aggregation$$anonfun$4.apply/Aggregation.scala:46/
at sbt.Aggregation$$anonfun$4.apply/Aggregation.scala:44/
at sbt.EvaluateTask$.withStreams/EvaluateTask.scala:137/
at sbt.Aggregation$.runTasksWithResult/Aggregation.scala:44/
at sbt.Aggregation$.runTasks/Aggregation.scala:59/
at sbt.Aggregation$$anonfun$applyTasks$1.apply/Aggregation.scala:31/
at sbt.Aggregation$$anonfun$applyTasks$1.apply/Aggregation.scala:30/
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply/Command.scala:62/
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply/Command.scala:62/
at sbt.Command$.process/Command.scala:90/
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply/MainLoop.scala:71/
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply/MainLoop.scala:71/
at sbt.State$$anon$2.process/State.scala:170/
at sbt.MainLoop$$anonfun$next$1.apply/MainLoop.scala:71/
at sbt.MainLoop$$anonfun$next$1.apply/MainLoop.scala:71/
at sbt.ErrorHandling$.wideConvert/ErrorHandling.scala:18/
at sbt.MainLoop$.next/MainLoop.scala:71/
at sbt.MainLoop$.run/MainLoop.scala:64/
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply/MainLoop.scala:53/
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply/MainLoop.scala:50/
at sbt.Using.apply/Using.scala:25/
at sbt.MainLoop$.runWithNewLog/MainLoop.scala:50/
at sbt.MainLoop$.runAndClearLast/MainLoop.scala:33/
at sbt.MainLoop$.runLoggedLoop/MainLoop.scala:17/
at sbt.MainLoop$.runLogged/MainLoop.scala:13/
at sbt.xMain.run/Main.scala:26/
at xsbt.boot.Launch$.run/Launch.scala:55/
at xsbt.boot.Launch$$anonfun$explicit$1.apply/Launch.scala:45/
at xsbt.boot.Launch$.launch/Launch.scala:69/
at xsbt.boot.Launch$.apply/Launch.scala:16/
at xsbt.boot.Boot$.runImpl/Boot.scala:31/
at xsbt.boot.Boot$.main/Boot.scala:20/
at xsbt.boot.Boot.main/Boot.scala/
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1/Native Method/
at java.lang.ClassLoader.defineClass/ClassLoader.java:791/
at java.security.SecureClassLoader.defineClass/SecureClassLoader.java:142/
at java.net.URLClassLoader.defineClass/URLClassLoader.java:449/
at java.net.URLClassLoader.access$100/URLClassLoader.java:71/
at java.net.URLClassLoader$1.run/URLClassLoader.java:361/
at java.net.URLClassLoader$1.run/URLClassLoader.java:355/
at java.security.AccessController.doPrivileged/Native Method/
at java.net.URLClassLoader.findClass/URLClassLoader.java:354/
at java.lang.ClassLoader.loadClass/ClassLoader.java:423/
at java.lang.ClassLoader.loadClass/ClassLoader.java:356/
at sbt.Project$$anon$5.apply/Project.scala:130/
at sbt.Project$$anon$5.apply/Project.scala:128/
at sbt.LogManager$.commandBase$1/LogManager.scala:59/
at sbt.LogManager$.command$1/LogManager.scala:60/
at sbt.LogManager$$anonfun$suppressedMessage$1.apply/LogManager.scala:61/
at sbt.LogManager$$anonfun$suppressedMessage$1.apply/LogManager.scala:61/
at sbt.ConsoleLogger.trace/ConsoleLogger.scala:163/
at sbt.AbstractLogger.log/Logger.scala:32/
at sbt.MultiLogger$$anonfun$dispatch$1.apply/MultiLogger.scala:40/
at sbt.MultiLogger$$anonfun$dispatch$1.apply/MultiLogger.scala:38/
at scala.collection.LinearSeqOptimized$class.foreach/LinearSeqOptimized.scala:59/
at scala.collection.immutable.List.foreach/List.scala:76/
at sbt.MultiLogger.dispatch/MultiLogger.scala:38/
at sbt.MultiLogger.trace/MultiLogger.scala:30/
at sbt.TestLogger$$anon$2.trace/TestReportListener.scala:71/
at sbt.TestLogger.endGroup/TestReportListener.scala:88/
at sbt.TestRunner$$anonfun$run$5.apply/TestFramework.scala:87/
at sbt.TestRunner$$anonfun$run$5.apply/TestFramework.scala:87/
at sbt.TestFramework$$anonfun$safeForeach$1.apply/TestFramework.scala:112/
at sbt.TestFramework$$anonfun$safeForeach$1.apply/TestFramework.scala:112/
at scala.collection.LinearSeqOptimized$class.foreach/LinearSeqOptimized.scala:59/
[error] java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
[error] Use 'last' for the full log.


有时他也会削减:


sbt appears to be exiting abnormally.
The log file for this session is at /var/folders/vf/3khb58091wd0_1rz1yh6knb00000gp/T/sbt3242766352271599341.log
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space


任何解决方案?
已邀请:

卫东

赞同来自:

如果您编译巨额代码基础,有时会发生这种情况 - 许多课程都装入 VM 被...统治 sbt.

你需要增加空间
PermGen

适用于SBT的使用标志
-XX:MaxPermSize=256m

, 在哪里
256

您可以使用所需的常量生成尺寸更改。




cat `which sbt`


找到你 sbt 启动脚本。 然后编辑它以与团队打开旗帜
java

, 它启动启动安装 sbt 以同样的方式
http://www.scala-sbt.org/relea ... .html
为了改变
-Xmx


-Xms

.

添加标志。
-XX:+CMSClassUnloadingEnabled

也应该负担得起 sbt 卸载具有来自以前编译启动的类的类加载器,不再使用。

EDIT:

此外,您可以在环境变量中设置这些参数
SBT_OPTS

, 如果使用
https://github.com/paulp/sbt-e ... r/sbt
.

要回复问题请先登录注册