Java 对类加载信息追踪

Java 对类信息追踪

对于 Java 程序运行的开始的过程就是类加载过程了,如果在类加载过程出现了问题的话会导致程序运行失败、运行异常亦或者获取不到预期的结果。这里总结一些如何调试解析这个过程。

Java 类加载过程

JVM 在启动后,会首先将 .class文件加载到内存,并且对类进行校验、准备、解析、初始化,最终形成 JVM 可以直接使用的 Java 类型。
在这里插入图片描述

Java 控制台打印类加载情况

启动 java 程序时通过添加 -verbose:class 选项可以实现在控制台打印进程运行过程中类的加载和卸载情况。

java -verbose:class -jar hello.jar com.example.Main

控制台打印结果:

在这里插入图片描述

对应的虚拟机打印类信息的选项还有-XX:+TraceClassLoading 可以实现跟踪类的加载;-XX:+TraceClassUnloading 选项可以实现 跟踪类的卸载;-XX:+PrintClassHistogram 可以实现显示类信息柱状图。

参数含义
-verbose:class跟踪类的加载和卸载
-XX:+TraceClassLoading跟踪类的加载
-XX:+TraceClassUnloading跟踪类的卸载
-XX:+PrintClassHistogram显示类信息柱状图

Java 获取类加载信息

我们还可以通过jdk自带的工具 jmapjhat对某一时刻java进程内的类及其对象的加载情况进行分析。

jmap

jmap是一个多功能的命令。它可以将 java进程在运行中的某一时刻内存情况导出成文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

# 查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
jmap -heap pid

在这里插入图片描述

现在我们将java进程在运行中的某一时刻内存情况导出成文件,然后查看类及其某一时刻的加载信息

# jmap -dump:format=b,file=heapdump.hrpof pid
jmap -dump:format=b,file=heapdump.hrpof 1556

在这里插入图片描述

然后我们可以使用jhat命令创建服务器来查看详情。

使用 jhat 分析jmap生成的堆快照

jhat 是Java堆分析工具(Java heap Analyzes Tool)。JDK自带工具。 命令与jmap搭配使用, 来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/Web服务器, 生成堆转储快照的分析结果后, 可以在浏览器中查看.

# jhat -J-Xmx1024M /path/to/file
jhat -J-Xmx1024M .\heapdump.hrpof

在这里插入图片描述

jhat会在本地启动一个端口为7000的服务器,并且显示堆信息

在这里插入图片描述

我们可以使用这个页面简单的进行分析堆信息,如果觉得这个网页太简单的话可以使用 Java VisualVM 对文件进行分析。

使用 Java VisualVM分析 jmap dump堆文件

在这里插入图片描述
首先在 jdk 安装目录下找到 Java VisualVM并打开。
在这里插入图片描述

菜单栏选择文件->装入,然后选择用 jmap 命令生成的文件。
在这里插入图片描述
在这里插入图片描述

参考资料

Java 类加载机制

通过 jmap 分析线上的一次异常
Java类加载的过程
jdk自带dump分析工具–jhat
深入浅出JVM
jvm 性能调优工具之 jmap
观察程序运行时类加载的过程-verbose:class

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值