JHSDB使用

JHSDB 是一款基于服务性代理实现的进程外调试工具。服务性代理是HotSpot 虚拟机中一组用于映射Java 虚拟机运行信息的,主要基于Java 语言实现的API 集合。

一、打开JHSDB

​ 打开JDK所在目录(一般默认装在c盘),保证在JDK的bin目录下也存在sawindbg.dll,没有的话可以从jre目录下面复制一份过来,只要保证两个文件夹都有就行了。

​ 在JDK的lib目录下Shift+右键点击在此处打开Powershell窗口

​ 在命令行中输入以下代码就可以开启了(可能需要等待个三秒左右)。

java -cp .\sa-jdi.jar sun.jvm.hotspot.HSDB

二、设置参数

​ 代码如下:

public class Student {
    private String name;
    private String gender;
    private int age;

    public String getName() {        return name;    }
    public void setName(String name) {        this.name = name;    }
    public String getGender() {        return gender;    }
    public void setGender(String gender) {        this.gender = gender;    }
    public int getAge() {        return age;    }
    public void setAge(int age) {        this.age = age;    }

public static void main(String[] args) throws Exception {
       
        //启动程序添加JVM参数 -XX:+UseConcMarkSweepGC -XX:-UseCompressedOops
        Student student = new Student();
        student.setName("王二狗");
        student.setGender("男");
        student.setAge(35);

        for (int i = 0; i < 15; i++) {
            System.gc();//主动发起 GC 15次
        }

        Student student1 = new Student();
        student1.setName("张三丫");
        student1.setGender("女");
        student1.setAge(25);

        Thread.sleep(Long.MAX_VALUE);
    }
}    
启动程序添加JVM参数:

官方JVM参数详解:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

 -Xms30m -Xmx30m -Xss1m -XX:MaxMetaspaceSize=30m -XX:+UseConcMarkSweepGC -XX:-UseCompressedOops


三、监听进程

​ 打开cmd或者之前已经打开的Powershell输入jps指令回车,可以看到启动的进程ID。

​ 下一步~~

​ 弹出以下页面表示成功。

四、相关参数查看

​ 选中main 线程,选择Tools中的Heap Parameters可以查看堆中的信息。在这可以看到堆的分区以及对应的内存地址范围。

​ 选择Tools中的Object Histogram可以看到方法区里的所有class,这里的查询是按照全局限定名来查询的,双击可以看到创建的两个对象。

​ 随便选择一个对象,点击Inspect可以看到对象的相关属性,此时就可以看到之前创建的对象了。

​ 选中main线程,点击StackMemory可以查询到栈中的信息,从这里也可以看到本地方法栈和虚拟机栈在Hotspot合二为一了。

posted @ 2021-01-28 14:33  某人人莫  阅读(2467)  评论(0编辑  收藏  举报