1 前述
为了深入理解JVM原理,有必要知道Class类在JVM内部的表示形式,HSDB工具可以查看JVM中Class的运行时状态,下面记录一下使用过程。
2 HSDB
HSDB (HotSpot Debbuger)是一款内置于SA(Serviceability Agent)中的GUI调试工具(《HotSpot实战》)。它位于%JAVA_HOME%/lib/sa-jdi.jar包中。SA是hotspot的调试工具集,它是很多常用jdk工具的基础,例如jps、jstack等。
3 HSDB使用
1.使用JPS查看Java进程号
2.java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
如果出现下述错误,到jdk1.8.0_121\jre\bin目录下去复制一份放到报错提示的位置:
C:\Users\lenovo>java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: Can't load library: C:\Program Files\Java\jre1.8.0_121\bin\sawindbg.dll
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.<clinit>(WindbgDebuggerLocal.java:661)
at sun.jvm.hotspot.HotSpotAgent.setupDebuggerWin32(HotSpotAgent.java:567)
at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:335)
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
at sun.jvm.hotspot.HSDB.attach(HSDB.java:1184)
at sun.jvm.hotspot.HSDB.access$1700(HSDB.java:53)
at sun.jvm.hotspot.HSDB$25$1.run(HSDB.java:456)
at sun.jvm.hotspot.utilities.WorkerThread$MainLoop.run(WorkerThread.java:66)
at java.lang.Thread.run(Unknown Source)
3. 点击Attach to,输入PID即可呈现下面的画面。窗口展示的是当前JVM的所有线程。
4. 双击查看任意线程
4 更多功能的简单使用
4.1 图形界面功能
展开Tools菜单,可以看到非常多的工具。
4.1.1
工具的简单介绍(摘自《HotSpot实战》85页):
4.2 命令行界面功能
打开命令行窗口,输入help提示可用的命令:
图形界面的功能是命令行界面功能的子集,这些功能实际由CLHSDB提供,我们可以直接在命令行使用这些功能:java -classpath “%JAVA_HOME%/lib/sa-jdi.jar” sun.jvm.hotspot.CLHSDB