JVM參數之追蹤類信息

我們都知道 JVM 在啓動的時候會去加載類信息,那麼我們怎麼得知他加載了哪些類,又卸載了哪些類呢?
使用下面的程序作爲本次的演示程序。

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 顯示類信息柱狀圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章