JVM的命令行參數參考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
HotSpot參數分類
標准: - 開頭,所有的HotSpot都支持
非標准:-X 開頭,特定版本HotSpot支持特定命令
不穩定:-XX 開頭,下個版本可能取消
java -version
java -X
GC常用參數
- -Xmn -Xms -Xmx -Xss
年輕代 最小堆 最大堆 棧空間 - -XX:+UseTLAB
使用TLAB,默認打開 - -XX:+PrintTLAB
打印TLAB的使用情況 - -XX:TLABSize
設置TLAB大小 - -XX:+DisableExplictGC
System.gc()不管用 ,FGC - -XX:+PrintGC
- -XX:+PrintGCDetails
- -XX:+PrintHeapAtGC
- -XX:+PrintGCTimeStamps
- -XX:+PrintGCApplicationConcurrentTime (低)
打印應用程序時間 - -XX:+PrintGCApplicationStoppedTime (低)
打印暫停時長 - -XX:+PrintReferenceGC (重要性低)
記錄回收了多少種不同引用類型的引用 - -verbose:class
類加載詳細過程 - -XX:+PrintVMOptions
- -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
必須會用 - -Xloggc:opt/log/gc.log
- -XX:MaxTenuringThreshold
升代年齡,最大值15 - 鎖自旋次數 -XX:PreBlockSpin 熱點代碼檢測參數-XX:CompileThreshold 逃逸分析 標量替換 ...
這些不建議設置
Parallel常用參數
- -XX:SurvivorRatio
- -XX:PreTenureSizeThreshold
大對象到底多大 - -XX:MaxTenuringThreshold
- -XX:+ParallelGCThreads
並行收集器的線程數,同樣適用於CMS,一般設為和CPU核數相同 - -XX:+UseAdaptiveSizePolicy
自動選擇各區大小比例
CMS常用參數
- -XX:+UseConcMarkSweepGC
- -XX:ParallelCMSThreads
CMS線程數量 - -XX:CMSInitiatingOccupancyFraction
使用多少比例的老年代后開始CMS收集,默認是68%(近似值),如果頻繁發生SerialOld卡頓,應該調小,(頻繁CMS回收) - -XX:+UseCMSCompactAtFullCollection
在FGC時進行壓縮 - -XX:CMSFullGCsBeforeCompaction
多少次FGC之后進行壓縮 - -XX:+CMSClassUnloadingEnabled
- -XX:CMSInitiatingPermOccupancyFraction
達到什么比例時進行Perm回收 - GCTimeRatio
設置GC時間占用程序運行時間的百分比 - -XX:MaxGCPauseMillis
停頓時間,是一個建議時間,GC會嘗試用各種手段達到這個時間,比如減小年輕代
G1常用參數
- -XX:+UseG1GC
- -XX:MaxGCPauseMillis
建議值,G1會嘗試調整Young區的塊數來達到這個值 - -XX:GCPauseIntervalMillis
GC的間隔時間 - -XX:+G1HeapRegionSize
分區大小,建議逐漸增大該值,1 2 4 8 16 32。
隨着size增加,垃圾的存活時間更長,GC間隔更長,但每次GC的時間也會更長
ZGC做了改進(動態區塊大小) - G1NewSizePercent
新生代最小比例,默認為5% - G1MaxNewSizePercent
新生代最大比例,默認為60% - GCTimeRatio
GC時間建議比例,G1會根據這個值調整堆空間 - ConcGCThreads
線程數量 - InitiatingHeapOccupancyPercent
啟動G1的堆空間占用比例