sbtをマニュアルに沿って標準的な設定していると、だいたいPermanentを拡張していると思います。
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
Setup#Manual Installation
http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html#manual-installation
で、Java 8をインストールしてsbtを起動すると、こんな感じで警告されます。
$ sbt Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=384M; support was removed in 8.0
*うちは、384Mにしていました…
Java 8から、Permanentがなくなったんでした。
Java 8でPermGenのOutOfMemoryError問題は解決されるのか?
http://www.infoq.com/jp/news/2013/03/java-8-permgen-metaspace
Javaヒープから、ネイティブヒープに移動したとのこと。
ですが、最初から大きめに取るにはMetaspaceSizeを指定し、使用する容量を制限する場合にはMaxMetaspaceSizeを指定するらしいです。無制限に使わないようにねーと。
ちょっと確認してみましょうか。
Java 8。
$ /usr/lib/jvm/java-8-oracle/bin/java -XX:+PrintFlagsFinal -version | grep 'MetaspaceSize' uintx InitialBootClassLoaderMetaspaceSize = 4194304 {product} uintx MaxMetaspaceSize = 18446744073709547520{product} uintx MetaspaceSize = 21807104 {pd product} java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Java 7。
$ /usr/lib/jvm/java-7-oracle/bin/java -XX:+PrintFlagsFinal -version | grep Perm uintx AdaptivePermSizeWeight = 20 {product} intx CMSInitiatingPermOccupancyFraction = -1 {product} bool CMSPermGenPrecleaningEnabled = true {product} intx CMSTriggerPermRatio = 80 {product} uintx MaxPermHeapExpansion = 5439488 {product} uintx MaxPermSize = 85983232 {pd product} uintx MinPermHeapExpansion = 327680 {product} uintx PermGenPadding = 3 {product} uintx PermMarkSweepDeadRatio = 5 {product} uintx PermSize = 21757952 {pd product} java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
Java 8の
uintx MaxMetaspaceSize = 18446744073709547520{product}
とJava 7の差がスゴイ…。
uintx MaxPermSize = 85983232 {pd product}
というわけで、うちのsbtの起動スクリプトはこんな感じにしました。
#!/bin/sh java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxMetaspaceSize=384M -jar `dirname $0`/sbt-launch.jar "$@"