标签:core jhsdb exe -- HSDB pid HotSpot 内存 Class
HSDB
Hotspot Debugger
是
JDK
自带的工具,用于查看
JVM
运行时的状态。每个版本
JDK
都带有
HSDB
功能,在
JDK9
以前没有
.exe
程序,需要命令打开
HSDB
。之后版本就出现
JHSDB.exe
,它在
bin
目录下。本文是在
JDK16
环境中。每个版本
JDK
的
HSDB
功能有细微差异,也有不少的
bug
。我用的
jdk1.8
最新版本,用
scanoops
直接返回空白。用
jdk16
,没有了
mem
命令很不方便。
JHSDB
它是对各种基础功能的整合。
jhsdb clhsdb [--pid pid | --exe executable --core coredump]
jhsdb debugd [options] pid [server-id]|[option] executable core [server-id]
jhsdb hsdb [--pid pid | --exe executable --core coredump]
jhsdb jstack [--pid pid | --exe executable --core coredump] [options]
jhsdb jmap [--pid pid | --exe executable --core coredump] [options]
jhsdb jinfo [--pid pid | --exe executable --core coredump] [options]
jhsdb jsnap [options] [--pid pid | --exe executable --core coredump]
JHSDB使用
Demo
public class DemoApplication {
public String as;
public Student st;
private static int num = 18;
public final String str = "Hello test";
public static void main(String[] args) {
DemoApplication ts = new DemoApplication();
System.out.println();
}
}
查看进程号
在打印处断点,debug
运行main()
方法。控制台Terminal
输入命令jps -l
查看Class类内存布局
终端输入jhsdb hsdb --pid 24812
,成功连接上HSDB
,点击Tools
打开Class Browser
搜索框搜索类名,出现符合了类信息。
把对应的内存地址拿到Inspector
中检索出InstanceKlass
内存布局,注意OopHandle
它持有正真_java_mirror
的访问句柄。垃圾回收时对象可能被移动(对象地址发生改变),通过Handle访问对象可以对使用者屏蔽垃圾回收细节。
InstanceKlass
的关于Filed
的一些属性。
查看OOP对象内存布局
hsdb> universe
scanoops
inspector
Class对象
查看Class对象
将OopHandle
中句柄对象的地址0x000002007ccb1088
放到Memory Viewer
中查看,获取它之后的地址就是Class对象的。把对应地址放到Inspector
查看Class对象的内存布局。静态变量也在其上。
标签:core,jhsdb,exe,--,HSDB,pid,HotSpot,内存,Class 来源: https://blog.csdn.net/success112/article/details/119353561
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。