1、jmap命令概述
jmap是一个可以输出内存中所有对象的工具。可以将JVM中的heap(堆),以二进制形式输出成文本。打印出某个java进程内存内所有'对象'的情况。
2、基本命令
1、jmap -heap <pid> : 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况。
说明:pid指java进程号
也可以将堆信息输出到文件中。jmap -heap pid >heap.txt
Attaching to process ID 6349, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.212-b04 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 0 【最小堆使用比例】 MaxHeapFreeRatio = 100 【最大堆可用比例】 MaxHeapSize = 268435456 (256.0MB) 【最大堆空间大小】 NewSize = 44564480 (42.5MB) 【新生代分配大小】 MaxNewSize = 89128960 (85.0MB) 【新生代最大可分配大小】 OldSize = 89653248 (85.5MB) 【老年代大小】 NewRatio = 2 【新生代占的比例】 SurvivorRatio = 8 【新生代与suvivor的比例】 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: 【堆使用情况】 PS Young Generation 【新生代】 Eden Space: 【Eden区】 capacity = 87031808 (83.0MB) 【Eden区容量】 used = 66957240 (63.85540008544922MB) 【Eden区使用量】 free = 20074568 (19.14459991455078MB) 【Eden区当前剩余容量】 76.93421697042075% used 【Eden区使用情况百分比】 From Space: 【From survivor区】 capacity = 1048576 (1.0MB) 【From survivor区容量】 used = 278544 (0.2656402587890625MB) 【From survivor区已使用量】 free = 770032 (0.7343597412109375MB) 【From survivor区剩余容量】 26.56402587890625% used 【From survivor区使用比例】 To Space: 【To survivor区】 capacity = 1048576 (1.0MB) 【To survivor区容量】 used = 0 (0.0MB) 【To survivor区使用量】 free = 1048576 (1.0MB) 【To survivor区剩余容量】 0.0% used 【To survivor区使用比例】 PS Old Generation 【老年代】 capacity = 179306496 (171.0MB) 【老年代容量】 used = 106356544 (101.42950439453125MB) 【老年代已使用容量】 free = 72949952 (69.57049560546875MB) 【老年代剩余容量】 59.31549964592471% used 【老年代使用比例】 30237 interned Strings occupying 3151392 bytes.
2、jmap -histo[:live] <pid> :打印每个class的实例数目,内存占用,类全名信息。VM的内部类名字开头会加上前缀'*'。如果live子参数加上后,只统计活的对象数量。
也可以将信息输出到文件中
jmap -histo 6349 >histo.txt
jmap -histo:live 6349 >histo_live.txt
说明: instances(实例数)、bytes(占用的字节大小)、 class name(类名)。它基本是按照使用使用大小逆序排列的。
instance 是对象的实例个数
bytes 是总占用的字节数
class name 对应的就是 Class 文件里的 class 的标识
B 代表 bytes
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组 [I 表示 int[]
对象用 [L+ 类名表示
3、jmap dump:[live,] format=b,file=<filename> <pid> :使用hprof二进制形式,输出jvm的heap内容到文件。live子选项是可选的,假如指定live选项,那么只输出活的对象到文件。
jmap -dump:format=b,file=dump.bin 6349
将dump输出的outfile文件使用MAT(内存分析工具(Memory Analysis Tool)) 或与 jhat(Java Heap Analysis Tool) 一起使用,能够以图像的形式直观展示当前内存是否有问题。
4、jmap -finalizerinfo <pid> : 打印正在等候回收的信息
参考地址
jmap命令详解(转):https://www.cnblogs.com/qq78292959/p/5141209.html
java命令--jmap命令使用:https://www.cnblogs.com/huanglog/p/10302901.html