如何查看jvm进程中加载的class文件
像spring、dubbo等框架都用到了动态代理等java字节码技术,我们在查看源码的时候,有时必须去查看框架生成的class文件才能知道具体的功能是如何实现的。
博主知道的有2种方式,分享给大家。
-
利用jre提供的工具。
-
新建一个bat脚本,命名为
查看jvm进程中的class.bat
-
编辑脚本。
java -classpath "%JAVA_HOME%libsa-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源码