JDK中自带的用于分析JVM内存状况的工具Jmap
Posted 不忘初心2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK中自带的用于分析JVM内存状况的工具Jmap相关的知识,希望对你有一定的参考价值。
查看java项目中所有占用内存的情况,从大到小依次排序,7529为java项目的进程号,可以使用jps命令获取 jmap -histo 7529
以二进制格式导出,file为自定义的文件名 7529为java项目进程号 jmap -dump:format=b,file=jvm.txt 7529
jmap 8297
打印堆的信息
jmap -heap 8297
打印存活的对象
jmap -histo:live 8297
打印类加载器的信息
jmap -clstats 8297
打印队列中哪些方法正在被回收
jmap -finalizerinfo 8297
生成dump对象,只记录存活的对象,二进制格式,file表示文件路径
jmap -dump:live,format=b,file=test.bin 8297
JVM优化之jmap的使用以及内存溢出分析
什么是jmap?
共享对象内存映射或堆内存细节
。jmap -heap pid
查看内存中对象数量及大小
#查看所有对象,包括活跃以及非活跃的
jmap -histo <pid> | more
#查看活跃对象
jmap -histo:live <pid> | more
对象说明
B: byte
C:char
D:double
F: float
I: int
J :long
Z :boolean
‘[‘ :数组,如:‘[I‘:表示int[]
‘[L+‘:类名 其他对象
将内存使用情况dump到文件中
有些时候我们需要将jvm当前内存中的情况dump到文件中,然后对它进行分析,jmap也
是支持dump到文件中的。
#用法:
jmap ‐dump:format=b,file=dumpFileName <pid>
通过jhat对dump文件进行分析
将jvm的内存dump到文件中,这个文件是一个二进制的文件,不方便查看,这时我们可以借助于jhat工具进行查看
#用法:
jhat ‐port <port> <file>
在浏览器中进行查看
在最下面有一个查询功能
输入: select s from java.lang.String s where s.value.length >= 1000 (查询长度大于等于1000的字符串)
结果会在左下角显示出来
通过MAT工具对dump文件进行分析
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,
它可以帮助我们查找内存泄漏和减少内存消耗。
使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,
并可以通过报表直观的查看到可能造成这种结果的对象。
官网地址:https://www.eclipse.org/mat/
下载与解压完成之后
使用
actions下面的
Histogram:列出内存中的对象,对象的个数以及大小
Dominator Tree:列出最大的对象以其依赖存活的对象
点击Histogram进入查看内存中的对象,对象的个数以及大小
点击Dominator Tree查看最大的对象以其依赖存活的对象
点击default_report进行查看查看可能存在内存泄露的分析
以上是关于JDK中自带的用于分析JVM内存状况的工具Jmap的主要内容,如果未能解决你的问题,请参考以下文章