Linux操作系統下內存4G,配置JAVA8 JVM:
-server -Xms2G -Xmx2G -Xmn256m -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -Xss256k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/appl/gc.log -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
參數含義說明:
- -server:設置JVM使用server模式,server模式啟動慢,運行性能和內存效率高,適用於生產服務器;相對應的有-client模式,client模式啟動速度快,運行性能和內存效率不高,適用於應用開發和調試
- -Xms2G:設置JVM初始分配的堆內存,默認值為物理內存的1/64,建議修改為與-Xmx一致
- -Xmx2G:設置JVM最大允許使用的堆內存,默認值為物理內存的1/4,建議修改為物理內存的2/3-1/4。
- -Xmn256m:設置JVM年輕代的大小,建議不要太大,過大可能會導致YGC時間過長,影響吞吐量
- -Xss256k:設置JVM中每個JAVA線程堆棧的大小,一般默認512~1024kb,建議值設置在默認范圍內
- -XX:MetaspaceSize=512M:設置JVM初始元空間大小,JAVA8以上才有該字段。當達到該值將觸發垃圾收集進行類型卸載。同時,如果釋放了大量的空間,GC將適當降低該值;如果釋放了很少的空間,GC則會在不超過MaxMetaspaceSize時,適當提高該值。由於GC每次調整元空間的代價很昂貴,因此建議該值與MaxMetaspaceSize一致
- -XX:MaxMetaspaceSize=512M:設置JVM初始元空間最大值
- -XX:+UseParNewGC:設置JVM開啟並發串行垃圾收集器,該收集器與CMS收集器配合工作。相對應的還有:UseParallelGC並行垃圾收集器,該收集器最大化的提高程序吞吐量,同時縮短程序停頓時間,但不與CMS收集器配合工作
- -XX:+UseConcMarkSweepGC:設置JVM開啟並發標記清除收集器,即開啟CMS收集器,一般和 XX:+UseParNewGC 一起設置使用
- -XX:+CMSClassUnloadingEnabled:設置JVM中CMS收集器對元空間(永久代)進行回收
- -XX:+HeapDumpOnOutOfMemoryError:設置JVM發生OOM時,自動生成DUMP文件。
- -XX:HeapDumpPath=./java_heapdump.hprof:設置JVM生成DUMP文件的路徑,也可以指定文件名稱,例如:-XX:HeapDumpPath=./java_heapdump.hprof,如果不指定文件名,默認為:java_<pid><date><time>_heapDump.hprof。
- -verbose:gc:設置JVM輸出GC日志 , -XX:+PrintGC 與 -verbose:gc 是一樣的,可以認為-verbose:gc 是 -XX:+PrintGC的別名.
- -XX:+PrintGCDetails:設置JVM打印GC詳細信息
- -XX:+PrintGCTimeStamps:設置JVM打印gc時間戳(以基准時間的形式)
- -XX:+PrintGCDateStamps:設置JVM打印GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
- -Xloggc:/appl/gc.log:設置JVM打印GC日志目錄
- -XX:CMSInitiatingOccupancyFraction=75:設置CMS收集器在對內存占用率達到75%的時候開始GC(因為CMS會有浮動垃圾,所以一般都較早啟動GC);
- -XX:+UseCMSInitiatingOccupancyOnly:設置CMS收集器只使用設定的回收閾值(上面指定的75%),如果不指定,JVM僅在第一次使用設定值,后續則自動調整