最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

jmap——Java内存分析工具

来源:博客园

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

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


(资料图片仅供参考)

# pid 是进程IDjmap -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=用于指定快照dump文件的文件名。

关键词: 动态链接库 垃圾回收 结构复杂