jmap(Memory Map for Java)Java内存映像工具
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump
或dump文件
)
如果不使用jmap命令,要想获取Java堆转储快照也还有一些比较“暴力”的手段:
譬如-XX:+HeapDumpOnOutOfMemoryError
参数,可以让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件,
通过-XX:+HeapDumpOnCtrlBreak
参数则可以使用[Ctrl]+[Break]
键让虚拟机生成堆转储快照文件,
又或者在 Linux系统 下通过Kill-3
命令发送进程退出信号“恐吓”一下虚拟机,也能顺利拿到堆转储快照。
jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。
用途
技巧:功能没几个,jmap -h
相当于目录
打印虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称
jdk <= 8 : jmap -heap 15876
jdk > 8 : jhsdb jmap --pid 15876
显示Java堆详细信息
jdk <= 8 :jmap -heap 19552
jdk > 8 :jhsdb jmap --heap --pid 19552
显示堆中对象的统计信息
jdk <= 8 :jmap -histo:live 19552
jdk > 8 :jhsdb jmap --histo --pid 19552
,jhsdb jmap --histo --pid 19552 | findstr str
显示每个Java类对象数量、内存大小(单位:字节)、完全限定的类名。
生成堆转储快照dump文件
jdk <= 8 :jmap -dump:format=b,file=heapdump.phrof 19552
jdk > 8 :jmap -histo:live,file=/tmp/histo.data 19552
-----------------------------------------------------------------------------读书笔记摘自 书名:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)作者:周志明
参考:jvm 性能调优工具之 jmap