1. 程式人生 > >Java類載入和解除安裝的跟蹤

Java類載入和解除安裝的跟蹤

什麼是類的載入和解除安裝

Java程式的執行離不開類的載入,為了更好地理解程式的執行,有時候需要知道系統載入了哪些類。一

為什麼要跟蹤

般情況下,系統載入的類存在於檔案系統中,以jar檔案或者class檔案的形式存在,可以直接在通過檔案系統檢視。但是在動態代理、AOP等程式設計過程中國,系統會在執行過程中動態地生成某些類,這些類相對比較隱蔽,無法通過檔案系統找到,為此,虛擬機器提供了類的載入|解除安裝跟蹤引數來幫助我們進行程式的除錯。

如何跟蹤

使用下面的引數來同時跟蹤類的載入和解除安裝

-verbose:class

也可以單獨使用下面引數來跟蹤類的載入

-XX
:+TraceClassLoading

也可以單獨使用下面引數來跟蹤類的解除安裝

-XX:+TraceClassUnloading

程式碼來幫忙

下面的程式是一個java的反射的例子,執行這個程式時,使用-verbose:class引數來跟蹤類的載入和解除安裝

public class SpyUnloadClass  {

    public static void main(String[] args) {
    Class<?> demo1 = null;
    Class<?> demo2= null;
    Class<?> demo3 = null
; try { // 一般儘量採用這種形式 demo1 = Class.forName("PartionOnStack"); } catch (Exception e) { e.printStackTrace(); } demo2 = new PartionOnStack().getClass(); demo3 = PartionOnStack.class; System.out.println("類名稱 " + demo1.getName()); System.out.println("類名稱 "
+ demo2.getName()); System.out.println("類名稱 " + demo3.getName()); } }

執行結果如下圖所示:

image

JDK工具的使用

Java虛擬允許程式猿在執行程式時列印和檢視系統中的類的分佈情況,在系統啟動時加引數

-XX:+PrintClassHistogram
然後在java的控制檯下按下Ctrl+Break(鍵盤右上角)組合鍵,控制檯就會顯示當前類的資訊

image