HSDB 是专门用于调试 HotSpot VM 的调试器,它是一个图形化界面。与之对应的还有个 CLHSDB-Command Line HotSpot Debugger,命令行调试界面。下面是启动命令:

java -cp .;%JAVA_HOME%/lib/sa-jdi.jar sun.jvm.hotspot.HSDB # 启动图形界面
java -cp .;%JAVA_HOME%/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB # 启动命令行界面

1. HSDB 图形界面

  启动 HSDB 后,使用 File -> Attach to HotSpot process 连接到目标进程:

  连接成功后,默认打开 Java Threads 界面,双击一个线程可查看其 OOP 信息,或者使用工具栏工具,如下:

  • Inspector:查看 OOP 和 Klass 对象信息,双击线程名称也能够查看此信息
  • Stack Memory:线程栈内存
  • Show Java Stack Traces:显示线程堆栈信息
  • Show Thread Infomation:显示线程信息
  • Find Crashes

(1)Inspector

(2)Stack Memory

栈内存界面有 3 栏信息,从左到右依次是:内存地址,指虚拟地址不是物理地址;该地址数据,以字宽为单位,如下图是在64位的机器的情况,字宽就是64位=8字节;相关注释,竖线表示范围,横线表示说明。

  Tools 工具栏也变得可用,主要有以下功能:

  • Class Browser:类浏览器
  • Code Viewer: 代码查看
  • Compute Reverse Ptrs:反向指针计算
  • Deadlock Detection:    死锁探测
  • Find Object by Query: 使用对象查询语言查询对象
  • Find Pointer:查找指针
  • Find Value in Heap:在堆中查询
  • Find Value in Code Cache:在Code Cache 中查询
  • Heap Parameters:堆信息
  • Inspector:对象检查器
  • Memory Viewer:  内存信息
  • Monitor Cache Dump:监控Cache信息
  • Object Histogram:    对象直方图
  • Show System Properties:显示系统属性
  • Show VM Version:显示 VM 版本
  • Show –XX flags:显示 VM 选项

使用 Heap Parameters 查看堆信息,能够查看出各代的地址空间:

2. CLHSDB

  既可以在 HSDB 中使用 Windows –> Console 进行命令行界面,也可以使用 Java 命令直接连接到 CLHSDB 如图:

  CLHSDB 提供了丰富的命令,使用 help 查看帮助信息,以下简单介绍常用的命令:

  • attach pid|exec core:连接 Java进程或 core文件
  • class name:查看类信息
  • classes:查看加载的类
  • detach:断开连接
  • inspect expression:查看 OOP 信息
  • jstack [-v]:线程堆栈
  • mem address [length]:查看内存,以字宽为单位
  • print expression:输出表达式值
  • revptrs:反向指针
  • scanoops start end [type]:扫描指定空间中的 type 类型及其子类的实例
  • thread {-a|id}:查看指定线程信息
  • threads:查看所有线程信息
  • universe:查看堆空间信息
  • whatis address:查看指定地址存放的数据信息
  • quit:退出

  通过 HSDB和CLHSDB 可以查看 JVM 内部信息,从本质上去了解 JVM 的工作原理。

HSDB - HotSpot debugger的更多相关文章

  1. 【JVM】【linux】linux上执行jmap命令查看JVM内存使用情况,报错:sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypes" in any of the known library name

    运行命令: jmap -heap 报错如下: Attaching to process ID , please wait... sun.jvm.hotspot.debugger.NoSuchSymbo ...

  2. JVM-对象及对象内存布局

    目录 前言 类与对象 对象类二分模型 对象 对象内存布局 JOL工具 对象头 Mark Word 类型句柄 对象头与锁膨胀 无锁 偏向锁 轻量级锁 重量级锁 重量级锁降级 实例数据 填充 对象生命周期 ...

  3. 014-通过JDB调试,通过HSDB来查看HotSpot VM的运行时数据

    一.JDB调试        在预发环境下进行debug时,时常因为工具和环境的限制,导致debug体验非常差,那么有什么方法能够简化我们进行debug的体验吗?JDB就是一种.        JDB ...

  4. 第一次使用HSDB

    今天看了几篇大佬关于HSDB使用的文章,自己也依样画葫芦的用来一下,强大的一匹!!! HSDB(Hotspot Debugger),JDK自带的工具,用于查看JVM运行时的状态. HSDB位于C:\P ...

  5. HSDB工具类使用探索jvm

    本文是引用https://club.perfma.com/article/2261053 有人问了个小问题,说: public class Test { static Test2 t1 = new T ...

  6. 99%的人都搞错了的java方法区存储内容,通过可视化工具HSDB和代码示例一次就弄明白了

    https://zhuanlan.zhihu.com/p/269134063  番茄番茄我是西瓜 那是我日夜思念深深爱着的人啊~ 已关注   6 人赞同了该文章 前言 本篇是java内存区域管理系列教 ...

  7. 【Java】JDK/JVM相关工具

    1.JDK自带工具 1)常见的用法参见:https://cloud.tencent.com/developer/article/1379487 2)HSDB,即Hotspot debugger,位置在 ...

  8. JVM 第四篇:可视化 JVM 故障处理工具

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 可视化工具 在 JDK 中为我们提供了大量的 JVM 故障处理工具,都在 JDK 的 bin 目录下: 这其中除了大量的命令行工具以外,还 ...

  9. java jvm常用命令工具

    [尊重原创文章出自:http://www.chepoo.com/java-jvm-command-tools.html] 一.概述 程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统 ...

随机推荐

  1. RESTful API URI 设计: 判断资源是否存在?

    相关的一篇文章:RESTful API URI 设计的一些总结. 问题场景:判断一个资源(Resources)是否存在,URI 该如何设计? 应用示例:判断 id 为 1 用户下,名称为 window ...

  2. DDD 领域驱动设计-在动手之前,先把你的脑袋清理干净

    惨不忍睹的翻译 英文原文:http://www.codeproject.com/Articles/339725/Domain-Driven-Design-Clear-Your-Concepts-Bef ...

  3. C#将一个excel工作表根据指定范围拆分为多个excel文件

    C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...

  4. CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突

    当RadioGroup与CompoundButton同时存在且都要监听事件时CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedCha ...

  5. C中的fseek函数使用

    函数名:fseek函数 头文件:#include<stdio.h> 功能:把与fp有关的文件位置指针放到一个指定位置. 格式:  int fseek(FILE *stream, long ...

  6. 一个基于mysql构建的队列表

    通常大家都会使用redis作为应用的任务队列表,redis的List结构,在一段进行任务的插入,在另一端进行任务的提取. 任务的插入 $redis->lPush("key:task:l ...

  7. sql server实现自定义分割月功能

    本文目录列表: 1.为何出现自定义分割月需求 2.sql server实现自定义分割月功能 3.测试验证效果 4.总结语 5.参考清单列表   1.为何出现自定义分割月的需求   今天梳理一个平台的所 ...

  8. SQL Server 存储过程遇到“表 '#TT' 没有标识属性。无法执行 SET 操作”错误

    创建临时表,往临时表插入数据的时候报的错误. 一开始提示没有打开主键,后来打开主键就提示上述错误异常. 从网上查找资料没有找到,然后又到群里问各位大牛,一位大牛告诉我是没有设置主键. 我又仔细看看提示 ...

  9. 趣味python编程之经典俄罗斯方块

    国庆期间闲不住,用python把经典俄罗斯方块实现了一遍,找到了些儿时的乐趣.因此突发奇想,打算用python写点经典又确实有趣的小程序形成系列.正统编程之余也给自己找点儿乐趣,换个角度写程序. 原计 ...

  10. 异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁

    返回目录 在System.Threading.Tasks命名空间下,使用ReaderWriterLockSlim对象来实现多线程并发时的锁管理,它比lock来说,性能更好,也并合理,我们都知道lock ...