如何查看jvm進程中加載的class文件
像spring、dubbo等框架都用到了動態代理等java字節碼技術,我們在查看源碼的時候,有時必須去查看框架生成的class文件才能知道具體的功能是如何實現的。
博主知道的有2種方式,分享給大家。
-
利用jre提供的工具。
-
新建一個bat腳本,命名為
查看jvm進程中的class.bat
-
編輯腳本。
java -classpath "%JAVA_HOME%\lib\sa-jdi.jar" sun.jvm.hotspot.HSDB
注:其中%JAVA_HOME%為jdk目錄
-
復制
%JAVA_HOME%/jre/bin
目錄下面的sawindbg.dll
到/jre/bin
目錄下面。 -
在命令行輸入
jps
命令,查看需要查看class文件所在的線程的pid -
雙擊腳本,運行。
-
選擇
file
->Attach to Hotspot process
,然后輸入process ID
,就是上面找到的pid -
選擇
Tools
->Class Browser
,可以查看該線程下面所有的class。 -
選中某個class記錄,點擊
Create .class File
,就會腳本目錄生成一個目錄,目錄和class文件包名相對應。 -
打開反編譯工具,指定剛才生成的class文件,便可以查看java源代碼了
-
-
利用阿里開源的【阿爾薩斯】工具
- java -jar arthas-boot.jar 運行arthas
- 輸入需要查看的線程編號
- 輸入
sc ${需要檢索的類名}
,就可以查看相關的類名 - 輸入
jad ${包名}
,便可以反編譯class源碼