1. 程式人生 > >JVM系列第12講:JVM引數之檢視JVM引數

JVM系列第12講:JVM引數之檢視JVM引數

今天要說的是如何檢視 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系列目錄


如果只是看,其實無法真正學會知識的。為了幫助大家更好地學習,我建了一個虛擬機器群,專門討論學習 Java 虛擬機器方面的內容,每週針對我所發文章進行討論答疑。如果你有興趣,關注「Java技術精選」公眾號,通過右下角選單「入群交流」加我好友,小助手會拉你入群。