今天要說的是如何查看 JVM 中已經設置的參數,包括顯示參數和隱式參數。
打印顯式參數 -XX:+PrintVMOptions
該參數表示程序運行時,打印虛擬機接受到的命令行顯式參數。我們用下面的命令運行程序:
java -XX:+UseSerialGC -XX:+PrintVMOptions com.chenshuyi.ClassLoadDemo
輸出結果:
VM option '+UseSerialGC'
VM option '+PrintVMOptions'
Hello, I'm chenshuyi
可以看到我們設置了+UseSerialGC
和+PrintVMOptions
兩個參數,最后運行時也將這兩個參數打印出來了。
打印顯式隱式參數 -XX:+PrintCommandLineFlags
該參數打印傳遞給虛擬機的顯式和隱式參數。我們用下面的命令運行程序:
java -XX:+UseSerialGC -XX:+PrintCommandLineFlags com.chenshuyi.ClassLoadDemo
輸出結果:
-XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseSerialGC
Hello, I'm chenshuyi
可以看到程序不僅輸出了我們顯式設置的參數,還將虛擬機默認的參數打印了出來,包括初始堆大小(134217728),最大堆大小(2147483648)等。
打印所有系統參數 -XX:+PrintFlagsFinal
該參數會打印所有的系統參數的值。我們用下面的命令運行程序:
java -XX:+UseSerialGC -XX:+PrintFlagsFinal com.chenshuyi.ClassLoadDemo > jvm_flag_final.txt
之后打開 jvm_flag_final.txt 文件,可以看到有 800 多行,這是因為程序將虛擬機的所有參數都打印了出來。下面列幾個我們常用的參數看看就可以:
...
uintx InitialHeapSize := 134217728 {product}
...
uintx MaxMetaspaceSize = 18446744073709547520 {product}
...
uintx MetaspaceSize = 21807104 {pd product}
從上面我們列出的部分參數可以看到,上面三個參數分別是設置初始堆大小、元空間最大大小、初始元空間大小。
最后,讓我們來總結一下,加強記憶。
- -XX:+PrintVMOptions 程序運行時,打印虛擬機接受到的命令行顯式參數。
- -XX:+PrintCommandLineFlags 打印傳遞給虛擬機的顯式和隱式參數。
- -XX:+PrintFlagsFinal 打印所有的系統參數的值
JVM系列目錄
- JVM系列開篇:為什么要學虛擬機?
- JVM系列第1講:Java 語言的前世今生
- JVM系列第2講:Java 虛擬機的歷史
- JVM系列第3講:到底什么是虛擬機?
- JVM系列第4講:從源代碼到機器碼,發生了什么?
- JVM系列第5講:字節碼文件結構
- JVM系列第6講:Java 虛擬機內存結構
- JVM系列第7講:JVM 類加載機制
- JVM系列第8講:JVM 垃圾回收機制
- JVM系列第9講:JVM垃圾回收器
- JVM系列第10講:垃圾回收的幾種類型
如果只是看,其實無法真正學會知識的。為了幫助大家更好地學習,我建了一個虛擬機群,專門討論學習 Java 虛擬機方面的內容,每周針對我所發文章進行討論答疑。如果你有興趣,關注「Java技術精選」公眾號,通過右下角菜單「入群交流」加我好友,小助手會拉你入群。