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合二為一了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM