JVM系列第13講:JVM引數之追蹤類資訊
阿新 • • 發佈:2018-12-10
我們都知道 JVM 在啟動的時候會去載入類資訊,那麼我們怎麼得知他載入了哪些類,又解除安裝了哪些類呢?我們這一節就來介紹四個 JVM 引數,使用它們我們就可以清晰地知道 JVM 的類載入資訊。
為了方便演示,我們使用下面的程式作為本次的演示程式。
/** * @author chenshuyi * @date 2018.09.30 */ public class ClassLoadDemo { public static void main(String[] args) { String name = "chenshuyi"; System.out.println("Hello, I'm " + name); } }
跟蹤類的載入和解除安裝 -verbose:class
我們使用下面的引數執行程式:
java -verbose:class com.chenshuyi.ClassLoadDemo > class_load_info.txt
之後我們開啟 class_load_info.txt 檔案。因為該檔案太大,所以我們節選一部分:
...省略... [Loaded java.util.ArrayList from /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar] ...省略... [Loaded java.util.HashMap from /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar] ...省略... [Loaded com.chenshuyi.ClassLoadDemo from file:/Users/yurongchan/Yosemite/Code/practice/target/classes/] ...省略...
從上面可以看到 JVM 分別載入了 ArrayList、HashMap 類,以及我們自己定義的 ClassLoadDemo 類。
跟蹤類的載入 -XX:+TraceClassLoading
該引數與可以顯示類的載入資訊,輸出的結果和 -verbose:class
一樣,但比起它少了類的解除安裝資訊。
跟蹤類的解除安裝 -XX:+TraceClassUnloading
該引數與可以顯示類的載入資訊,輸出的結果和 -verbose:class
一樣,但比起它少了類的載入資訊。
但實際上我們通過上面這個簡單的例子,沒有發現類的解除安裝資訊,或許是例子太簡單了,所以沒有這個。
-XX:+PrintClassHistogram
該引數表示遇到 Ctrl-Break 後列印類例項的柱狀資訊,與 jmap -histo 功能相同。
瞭解了這些引數,能夠讓我們更好地瞭解哪些類已經被載入到 JVM 中,從而更好地排查問題。最後來個總結,加強記憶:
引數 | 含義 |
---|---|
-verbose:class | 跟蹤類的載入和解除安裝 |
-XX:+TraceClassLoading | 跟蹤類的載入 |
-XX:+TraceClassUnloading | 跟蹤類的解除安裝 |
-XX:+PrintClassHistogram | 顯示類資訊柱狀圖 |
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技術精選」公眾號,通過右下角選單「入群交流」加我好友,小助手會拉你入群。