【使用HSDB工具查看运行时的类文件】

本文介绍如何使用HSDB工具查看Java动态代理创建的代理类。包括启动HSDB、获取Java进程PID的方法、通过HSDB浏览Class文件及反编译查看的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:例如在运行时想要查看动态代理创建的代理类。

  1. 启动项目

  2. 打开HSDB ( 在你的JAVA_HOME/lib目录下,找到sa-jdi.jar )

在这里插入图片描述


  1. 在此目录下打开cmd界面

在这里插入图片描述

  1. 通过命令启动HSDB工具
java -classpath sa-jdi.jar "sun.jvm.hotspot.HSDB"

在这里插入图片描述

  1. 点击file -> 选择Attach to HotSpot process

在这里插入图片描述

出现了这个界面,要求输入Java进程的Pid (进程ID)

在这里插入图片描述

  1. 获取进程ID
    1. 通过指令
netstat -aon | findstr "端口号"

在这里插入图片描述

  2. 通过Java工具 (项目启动时显示在日志)
public static int getPid() {
    final String processName = ManagementFactory.getRuntimeMXBean().getName();
    if (StringUtils.isBlank(processName)) {
        throw new RuntimeException("Process name is blank!");
    }
    final int atIndex = processName.indexOf('@');
    if (atIndex > 0) {
        return Integer.parseInt(processName.substring(0, atIndex));
    } else {
        return processName.hashCode();
    }
}

  1. 输入进程ID

    出现了这样的界面,显示所有的线程

在这里插入图片描述


  1. 点击Tools,选择 Class Browser (Class文件浏览)

在这里插入图片描述


  1. 出现一个窗口,首先通过关键字查找,找到JDK实现的代理类

在这里插入图片描述


  1. 当然,在上面看的不够直观,可以将Class文件存起来,转移到IDEA反编译查看
  • 点击Create .class File,将Class文件转储

在这里插入图片描述

  • 地址为你打开HSDB工具的目录,在这里找到Class文件

在这里插入图片描述

  • 转移到Idea反编译查看

在这里插入图片描述

  1. 可以看到,代理类继承了Proxy,实现了我们自己的接口,所以这就是为什么JDK动态代理只能实现接口。

  2. 因为Java是单继承,已经继承了Proxy类,无法再继承其他的类,但是代理类又需要原始接口的方法,所以只能实现接口,获取方法。

问题:

  1. 在命令行启动HSDB工具时,可能会出现找不到 sawingbg.dll 的情况,它有可能被安装到了JDK目录下的jre/bin目录下,请将它复制到jre/bin目录下即可。
E:\CodeSoftware\jdk1.8.0_181\jre\bin\sawingbg.dll   -->  E:\CodeSoftware\jre1.8.0_181\bin\sawingbg.dll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值