JVM參數選項
# 查看標準選項
java -help
# 查看-X選項
java -X
# 查看高級選項 -XX
java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsInitial
JDK11:https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE
JDK8:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC
使用java -XX:+PrintFlagsInitial |grep 關鍵詞,獲得關鍵詞相關的JVM參數。如果是Windows,把grep換成findstr即可。
java -XX:+PrintFlagsInitial 表示打印出所有參數選項的默認值
java -XX:+PrintFlagsFinal 表示打印出所有參數選項在運行程序時生效的值
例如,查詢Hospot回邊計數器提交OSR編譯請求時的閾值
# windows
$ java -XX:+PrintFlagsInitial | findstr OnStack
intx OnStackReplacePercentage = 140 {pd product}
bool UseOnStackReplacement = true {pd product}
對照 https://chriswhocodes.com ,輸入參數,查詢這些參數的含義。需要按照JDK版本選擇,例如JDK8沒有CounterHalfLifeTime
參數。
PS. 生產環境不建議隨意調整這些參數,保持默認即可。
使用jinfo也可以實現同樣功能
$ jinfo -flag ThreadStackSize 14356
-XX:ThreadStackSize=0
## JDK9起
jhsdb clhsdb --pid 進程號
然後輸入flags去查看
使用XXFOX
使用XXFOX查詢、校驗、優化、生成參數,切換版本。網站還可以分析Java線程dump文件和Java內存dump文件。