How to prevent java.lang.OutOfMemoryError: PermGen space at Scala compilation?

前端 未结 8 1729
感动是毒
感动是毒 2020-12-02 07:36

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]          


        
相关标签:
8条回答
  • 2020-12-02 07:54

    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.

    0 讨论(0)
  • 2020-12-02 07:56

    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.

    0 讨论(0)
  • 2020-12-02 07:57

    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.

    0 讨论(0)
  • 2020-12-02 07:58

    It looks like a memory leak in SBT for me as in my case the program compiles and runs successfully for about 3-5 times before hitting the exception which is fixed by SBT restart.

    The most adequate solution indeed seems to be -XX:MaxPermSize= JVM parameter as Alexey Romanov suggests or to restart SBT periodically if it helps.

    But there is another interesting way: try switching to Java 8. AFAIK it doesn't use PermGen any more and is probably immune to this exception this way.

    I still hope SBT authors will address this issue in future versions.

    0 讨论(0)
  • 2020-12-02 08:00

    change following code block in sbt.sh file and save its working fine.

    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"
    }
    

    or

    using terminal to export sbt config

    export SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:PermSize=1024M -XX:MaxPermSize=2048M"
    
    0 讨论(0)
  • 2020-12-02 08:07

    Originally using a command like:

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

    I got first OutOfMemoryError: PermGen space which I solved using -XX:MaxPermSize, and then OutOfMemoryError: Java heap space, to which -Xmx was the remedy.

    So in my case, a command like this worked:

    java -XX:MaxPermSize=256M -Xmx2048M -jar /path/to/sbt-launch.jar test
    
    0 讨论(0)
提交回复
热议问题