Java对象信息对开发者来说并不是透明的,需要借助工具来更好查询对象的运行情况,这里我们带来HSDB工具。
演示
打开工具过程
-
工具是JDK自带的:目录:jdk1.8.0_20\lib\sa-jdi.jar。
-
使用cmd,并且切换到Jar所在目录:C:\Program Files\Java\jdk1.8.0_20\bin 。
使用命令提示符在当前jdk目录下的lib下面
- 执行命令下面,会自动弹出一个界面。
perl
java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
界面如下:
- 准备一个测试案例看看如何使用该工具
java
import java.io.IOException;
public class HsdbDemo {
public static final int i = 2;
public static void main(String[] args) throws IOException, InstantiationException, IllegalAccessException {
HsdbDemo hsdbDemo = new HsdbDemo();
System.out.println(i);
System.in.read();
}
}
写了一个死循环,把他运行起来,然后执行jps 命令。
jps -- 查询进程的id
找到我们需要的进程号(对应的类名称HsdbDemo),将该进程号填入HSDB工具中。
点击Ok后会出现报错:
提示缺少sawingdbg.dll,该文件在jre/bin目录下:
移动到jre1.8.0_20\bin文件所在的目录下面,从新运行命令并且加入进程号就能看到如下界面。
- 查看对象信息
点击打开
我们要根据内存地址找到Java底层对应的对象
输入内存地址并且点击compute Liveness。