我使用的是SBT 0.7.7。当我对Lift项目进行更改并通过以下方式重新编译时:
jetty-stop
compile
jetty-run
我收到以下错误:
执行sbt时出错:java.lang.OutOfMemoryError:PermGen space
我在/opt/local/bin/sbt-0.7中定义了以下内容:
# Is the location of the SBT launcher JAR file.
LAUNCHJAR="/opt/local/share/sbt-0.7/sbt-launch-0.7.7.jar"
# Ensure enough heap space is created for SBT.
if [ -z "$JAVA_OPTS" ]; then
JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M"
fi
# Assume java is already in the shell path.
exec java $JAVA_OPTS -jar "$LAUNCHJAR" "$@"
答案 0 :(得分:37)
PermGen只是众多空间中的一个,它们整体构成了堆。您可以增加整个堆,直到分配的部分足够大,或者您可以简单地增加PermGen空间的分配。为了做到这一点,请使用
对于sbt 0.12.0
导出SBT_OPTS = -XX:MaxPermSize = 256m
最好把它放在你的.bash_profile中(假设你使用的是bash)
对于sbt 0.7
在您的情况下,将-XX:MaxPermSize增加到256m以上。请记住,需要超过256米表明可能存在其他问题。
答案 1 :(得分:6)
您需要允许java分配更多内存。
# You may need more or less depending on your project.
export SBT_OPTS=-Xmx1024M
您也可以重新访问其他一些内存设置。我正在运行SBT 0.11.2,除了Xmx,我什么都没有。
顺便说一句,如果您在编译期间确实遇到任何GC问题,我会感到惊讶。更改GC收集策略与更长时间运行的流程更相关。