jcmd
jmap
jconsole
jvisualVM等等工具
虚拟机添加-XX: HeapDumpOnOutOfMemoryError 选项, 在抛出 OutOfMemoryError 时, 会自动执行堆转储。
jhat -J-Xmx512M dump.hprof
说明:有时dump出来的堆很大,在启动时会报堆空间不足的错误,可加参数:jhat -J-Xmx512m 。这个内存大小可根据自己电脑进行设置。
在浏览器中输入ip端口(端口在上面的日志中已经给出)
这个页面包含了各种功能
下面执行几个
把堆所有类信息显示出来(默认是不包括Java平台的类)
从根集能引用到的对象
这个没怎么看懂,看到nanjing这个类只是被加载了下的意思吗?
显示平台包括的所有类的实例数量
可以看到NanJing28Suo这个类的实例是最多的
点击这个类进去,能够看到类的一些基本信息
平台外的所有对象信息
看到只有两个,这里我们还是跟上面Instance Counts for All Classes (including platform)一样能够点击进去看信息
堆实例的直方图
点击一下instance count 或者 total size进行排序。
可以看到最多的还是NanJing28Suo这个类的实例最多,这个时候点击它进去
还是刚才熟悉的页面
等待回收
可以看到等待回收的是0,这肯定是有问题的。
执行对象查询语句
有篇博客还不错:https://www.iteye.com/blog/bijian1013-2221447
英文比较好的话
一般主要看:
Show instance counts for all classes (excluding platform)
Show heap histogram
目前看来jhat可能并不是一个很好的方式,不能定位到代码级别,作为一个颜控表示这个页面做的有点粗糙呢~~~
还是MAT比较好用我个人认为
java命令–jhat命令使用 https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html
JVM学习笔记——jhat的使用 https://www.jianshu.com/p/ddc6d843a8a0
【Java命令二】jhat https://www.iteye.com/blog/bit1129-2187290
jhat中的OQL(对象查询语言)https://www.iteye.com/blog/bijian1013-2221447