如何查看jvm进程中加载的class文件

如何查看jvm进程中加载的class文件

像spring、dubbo等框架都用到了动态代理等java字节码技术,我们在查看源码的时候,有时必须去查看框架生成的class文件才能知道具体的功能是如何实现的。

博主知道的有2种方式,分享给大家。

  1. 利用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源代码了

  2. 利用阿里开源的【阿尔萨斯】工具

    教程文档

    • java -jar arthas-boot.jar 运行arthas
    • 输入需要查看的线程编号
    • 输入sc ${需要检索的类名},就可以查看相关的类名
    • 输入jad ${包名},便可以反编译class源码
原文地址:https://www.cnblogs.com/mwss/p/13461027.html