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。
