jmap——Java内存分析工具

jmap是JDK自带的监控工具,在JDK的根目录中可以找到。主要用来查看Java进程对内存的使用情况

1、查看类列表,包含实例数、占用内存大小

# pid 是进程ID
jmap -histo:live pid

按照占用空间的大小打印程序中类的列表,可以分析哪些类占用了比较多的内存,再结合代码找到问题的所在

2、查看动态链接库的列表

jmap pid

Java进程本身和动态链接库都会在其占用的虚拟地址空间上分配内存。Java的堆和栈等内存空间分配在Java进程中,Java的直接内存会分配在Java进程堆内存外或者依赖的动态链接库上。此命令可以帮助定位Java进程占用内存较大或者底层动态链接库占用内存较大的问题,在定位Java进程导致的内存泄露场景中有很重要的作用。

3、查看Java堆的概要信息

jmap -heap pid

Java堆内存结构复杂,包括新生代、老年代、持久代、直接内存等。

包含以下信息:

  • 被指定的垃圾回收算法的信息,包括垃圾回收算法的名称和垃圾回收算法的详细信息。
  • 堆的配置信息,可能是由命令行选项指定,或者由Java虚拟机根据服务器配置选择的。
  • 堆的内存空间使用信息,包括分代情况,每个代的总容量、已使用内存、可使用内存。如果某一代被继续细分(例如,年轻代),则包含细分的空间的内存使用信息。

4、生成Java虚拟机的堆转储快照 dump文件

有些Java内存问题不是显而易见的,从类、动态链接库、堆的概要信息的角度无法定位具体产生的原因,我们需要对Java堆的内部结构进行剖析才能进一步分析产生问题的根本原因。

生成快照后,通过其它工具甚至可视化内存分析工具等进行详细分析(JHAT、JMAT、JProfiler、JConsole、JVisualVM)

jmap -dump:[live,]format=b,file=./heap.hprof pid
  • live参数是可选的,如果指定,则只转储堆中的活动对象;如果没有指定,则转储堆中的所有对象。
  • format=b表示以hprof二进制格式转储Java堆的内存。
  • file=<filename>用于指定快照dump文件的文件名。

 

posted @   shog808  阅读(4605)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示