JVM系列第12講:JVM引數之檢視JVM引數
阿新 • • 發佈:2018-12-10
今天要說的是如何檢視 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技術精選」公眾號,通過右下角選單「入群交流」加我好友,小助手會拉你入群。