JVM調優(六)
一、常見垃圾回收器組合引數設定
1、-XX: UseConcMarkSweepGC = ParNew + CMS + Serial Old
2、-XX: Use[arallelGC = Parallel Scavenge + Parallel Old(1.8預設)【PS + SerialOld】
3、UseParallelOldGC = Parallel Scavenge + Parallel Old
4、UseG1GC = G1
二、瞭解JVM常用命令列引數
1、標準:-開頭,所有Hotspot
非標準:-X開頭,特定版本HotSpot支援特定命令
不穩定:-XX開頭,下個版本可能取消
可以通過:java -XX:+PrintFlagsFinal() -version | grep CMS命令查詢JVM引數
2、常用命令
記憶體洩漏:某個物件佔用記憶體空間無法被回收 記憶體溢位:記憶體中所有的物件所佔用的總空間超過實體記憶體空間
①java -XX:+PrintCommandLineFlags HelloGC
-XX:InitialHeapSize -XX:MaxHeapSize -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
初始堆記憶體 最大堆記憶體 檢視程式使用的預設的JVM引數 Pointers引數保持與Oops引數相同的狀態,Oops開啟時型別指標為4位元組,關閉時為8位元組
②java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HelloGC
新生代 最小堆 最大堆大小
實際環境中最大堆與最小堆記憶體一般設定相同大小,避免彈性壓縮。彈性壓縮:當記憶體大小超過最小堆後,彈到最大堆中,當最小堆有空閒記憶體時,從最大堆彈出物件到最小堆
GC命令:PrintGCDetails列印GC詳細資訊 PrintGCTimeStamps列印GC時間 PrintGCCauses列印GC產生的原因
MaxNewSize:最大年輕代大小 NewSize:其實年輕代大小
③java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC
④java -XX:+PrintFlagsInitial 預設引數值
⑤java -XX:+PrintFlagsFinal 最終引數值
⑥java -XX:+PrintFlagsFinal | grep xxx找到對應引數
⑦java -XX:+PrintFlagsFinal -version | grep GC
三、GC日誌詳解