1、JVM的內存
JVM的內存 = 年輕代 + 年老代 + 持久代
-Xms: 設置初始JVM內存大小
-Xmx: 設置最大JVM內存大小
一般講Xms, Xmx設置成一樣的大小,避免超過Xms後,內存重新整理;另外,由於由於jvm進程本身會占用內存空間,所以jvm實際占用的內存空間會比設置的大
-Xmn: 設置年輕代內存大小
年輕代包括兩個區,Edgen 和 Survivor 區,Suvrvior區還被平均分成了兩塊 from space 和 to space,默認情況下 Edgen與2個Survior大小比例 8:2, 即一個survivor占據
1/10的年輕代內存大小。可以通過-XX:SurviorRatio=X 修改Edgen與Survior的大小比例
老年代的大小無法設置,等於 JVM內存-年輕代-持久代;如果未指定-Xmn參數,可以通過-XX:NewRatio=X設置年輕代和年老代的比例,默認1:2, 即年輕代占據除去持久代內存的1/3
-XX:PermSize=256M: 持久代初始內存大小
-XX:MaxPermSize=512M: 最大持久代內存大小,一般不需要設置很大,可以在程序運行一段時間後,通過jconsole進行查看,從而調整持久代的初始值及最大值
2、其它參數
-server: 在linux上默認是開啟的,windows上要手動設置
-XX:+UseG1GC: -Xmx設置超過4g時,建議開啟;一般采用 -XX:+UseConcMarkSweepGC
-Djava.awt.headless=true: 在服務器上使用時,一般開啟
3、舉個例子
1)JAVA_OPTS="$JAVA_OPTS -Xms6g -Xmx6g -Xmn2g -Xss1024K-XX:PermSize=256M -XX:MaxPermSize=1g -Djava.awt.headless=true -XX:+UseG1GC "
2)JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx2g -Xmn700M -Xss512K -XX:PermSize=256M -XX:MaxPermSize=512M -Djava.awt.headless=true -XX:+UseConcMarkSweepGC"