1 參數類型
1.1 標準參數
-help
-server -client
-version -showversion
-cp -classpath
1.2 X 參數
-
非標準化參數
-
-Xint :解釋執行
-
-Xcomp :第一次使用就編譯成本地代碼
-
-Xmixed :混合模式, JVM自己來決定是否編譯成本地代碼
-
JDK8默認混合模式
1.3 XX 參數
- 非標轉化參數,相對不穩定,主要用於JVM調優和Debug
Boolean類型
- 格式:
-XX:[±]表示啓用或者禁用name屬性,比如:
-XX:+ UseConcMarkSweepGC
-XX:+UseG1GC
非 Boolean類型
- 格式:
-XX: <name> = <value>
表示name屬性的值是value
比如:
-XX:MaxGCPauseMilis=500
XX:GCTimeRatio=19
注意,-Xmx -Xms
不是X參數,而是XX參數
-Xms等價於-XX:InitialHeapSize
-Xmx等價於-XX:MaxHeapSize
2 運行時參數
- -XX:+ PrintFlagsInitial
- -XX:+ PrintFlagsFinal
- -XX: +UnlockExperimentalVMOptions 解鎖實驗參數
- -XX: + UnlockDiagnosticVMOptions 解鎖診斷參數
- -XX:+ PrintCommandLineFlags 打印命令行參數
查看XX選項的值
- -XX:+PrintCommandLineFlags
- -XX:+PrintFlagsInitial -XX:+PrintFlagsFinal
- =表示默認值
- :=被用戶或者JVM修改後的值
jps
jinfo
- 查看最大內存
jinfo -flag MaxHeapSize 1430
-XX:MaxHeapSize=1073741824
- 查看垃圾收集器
➜ ~ jinfo -flag UseConcMarkSweepGC 1430
-XX:-UseConcMarkSweepGC
- 查看回收次數閾值
➜ ~ jinfo -flag MaxTenuringThreshold 58064
-XX:MaxTenuringThreshold=15
3 jstat
查看JVM統計信息
3.1 類裝載
3.2 GC
-gc, -gcutil, -gccause, -gcnew, -gcold
-gc輸出結果
S0C、S1C、SOU、 S1∪ : S0和S1的總量與使用量
EC、EU : Eden區總量與使用量
OC、OU : Old區總量與使用量
MC、MU : Metaspace區總量與使用量
CCSC、CCSU :壓縮類空間總量與使用量
YGC、YGCT : YoungGC的次數與時間
FGC、FGCT : FulIGC的次數.與時間
GCT :總的GC時間
JIT 編譯
- -compiler
- -printcompilation
4 jmap + MAT 實戰內存溢出
堆區
非堆區
5 導出內存映像文件
OutofMemory(OOM)相關的選項
如果程序發生了OOM後,JVM可以配置一些選項來做些善後工作,比如把內存給dump下來,或者自動採取一些別的動作
- -XX:+HeapDumpOnOutOfMemoryError
在內存出現OOM的時候,把Heap轉存(Dump)到文件以便後續分析,文件名通常是java_pid<pid>.hprof
- -XX:HeapDumpPath=
指定heap轉存文件的存儲路徑,需要指定的路徑下有足夠的空間來保存轉存文件 - -XX:OnOutOfMemoryError
指定一個可行性程序或者腳本的路徑,當發生OOM的時候,去執行這個腳本
內存溢出自動導出
- -XX:+ HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=./
使用jmap命令手動導出
jmap
option : -heap , -clstats , -dump: , -F