jhsdb hsdb

TIPS

  • jhsdb hsdb是jhsdb的子命令,故而阅读本文之前,请务必先阅读《jhsdb》
  • 本文基于JDK 11编写,理论适用于JDK 9及更高版本,对于JDK 8及更低版本,可参照《jhsdb》中的描述使用。

本文接演《jhsdb》,探讨jhsdb hsdb子命令,也就是jhsdb的GUI模式。
要想进入,只需输入如下命令:

  1. jhsdb hsdb [--pid pid | --exe executable --core coredump]

示例:

  1. jhsdb hsdb --pid 81033

Java Threads

Java Threads

内置可视化工具-jhsdb hsdb - 图1
进入后,可看到类似如上图的界面:
其中:

  • OS Thread ID:线程id
  • Java Thread Name:线程名称

    Inspect Thread

    选择一个线程,然后点击 Java Thread 对话框中的第一个图标,即可弹出 Inspector 对话框,从中可看到对线程的诊断。
    其中展示了对象头和指向对象元数据的指针,里面包括了Java类型的名字、继承关系、实现接口关系,字段信息、方法信息、运行时常量池的指针、内嵌的虚方法表(vtable)以及接口方法表(itable)等。其实都是HotSpot VM里记录线程的一些基本信息的C++对象的内容。 如果对C++不熟悉,阅读起来会有一些困难。
    内置可视化工具-jhsdb hsdb - 图2

    Stack Memory

    选择一个线程,然后点击 Java Thread 对话框中的第二个图标,即可弹出 Stack Memory 对话框,里面是线程栈的内存数据。
    内置可视化工具-jhsdb hsdb - 图3
    其中:

  • 第一列:内存地址(虚拟地址,非物理内存地址)

  • 第二列:该地址上存储的数据,以字宽为单位,本文是在macOS 64-bit上跑64位的HotSpot VM JDK 11,字宽是64位(8字节)
  • 第三列是:对数据的注释,竖线表示范围,横线或斜线连接范围与注释文字。

如果想查看某个对象的内容,可如下操作:

  • Windows - Console
  • 输入inspect 想要查看对象的地址 1 代码块

如下图所示:
内置可视化工具-jhsdb hsdb - 图4

Show Java stack trace

选择一个线程,然后点击 Java Thread 对话框中的第三个图标,即可弹出 Show Java stack trace 对话框,里面展示了这个线程的线程栈
内置可视化工具-jhsdb hsdb - 图5

Show Thread Information

选择一个线程,然后点击 Java Thread 对话框中的第四个图标,即可弹出 Show Thread Information 相关信息,里面展示了这个线程的信息。
内置可视化工具-jhsdb hsdb - 图6

Find Crashes

选择一个线程,然后点击 Java Thread 对话框中的第五个图标,即可找到该线程崩溃的原因。目前我这边线程没有崩溃,所以展示不出效果。

Windows Console

然后输入诊断命令,输入help可查看所有诊断命令。和jhsdb clhsdb里面的诊断命令一致。

Tools

提供一系列工具,这些工具其实是诊断命令的一个便捷化,也都可以用诊断命令代替。

收集的HSDB相关的文章

TIPS
由于这些文章使用的JDK版本较老,里面用到的部分命令已经被废弃了,所以并不能直接使用,这些文章用于拓展思路、仅供参考。