How to prevent java.lang.OutOfMemoryError: PermGen space at Scala compilation?
I have noticed a strange behavior of my scala compiler. It occasionally throws an OutOfMemoryError when compiling a class. Here's the error message:
[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
It only happens once in a while and the error is usually not thrown on the subsequent compile run. I use Scala 2.9.0 and compile via SBT.
Does anybody have a clue as to what might be the cause for this error? Thanks in advance for your insights.
Solution 1:
I use HomeBrew to install sbt on OS X. It supports a SBT_OPTS
argument which can be put in ~/.sbtconfig
file with export SBT_OPTS=-XX:MaxPermSize=256M
.
Solution 2:
The cause for OutOfMemoryError: PermGen space
is that it doesn't have enough permanent generation space :) If you are using Oracle JVM, you need to add the -XX:MaxPermSize=256M
(or some other amount of space) argument to your sbt
script. For other JVMs, look at their documentation.
Solution 3:
I assumed you're using sbt 0.13.6 or higher. Create .sbtopts
file in your sbt project's root with the following content:
-J-Xmx4G
-J-XX:MaxMetaspaceSize=1G
-J-XX:MaxPermSize=1G
-J-XX:+CMSClassUnloadingEnabled
MaxMetaspaceSize
is for Java 8 whereas MaxPermSize
is for Java 7. They are critical to prevent out of memory errors related either to permgen or metaspace exhaustion. Of course, consider adapting flag values or adding any other flags required.
More details and alternative approaches can be found in this blog post.
Solution 4:
I had this issue, played around with it for 10 minutes looking at sites trying to change the memory size.
Turns out i resolved it by,
user-profile$ sbt
Then,
sbt-project-name 0.1> clean
This cleared it up for me.