一、定义
jmap是jdk自带的原生命令,包含很多功能,如生成堆栈dump文件、查看堆内的对象信息、classloader类加载信息一级finalizer队列,只是jmap没有图形界面。
二、使用方法
命令格式:
jmap -[options] <pid>
options参数命令详解:
- no options:无参数,则查询打印大于内存中的共享对象信息
结果包含三列:
(16进制)共享对象的地址; | 对象的映射大小 | 共享对象文件的路径全称 |
- heap :打印Java堆详细信息
Attaching to process ID 2496, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b187
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
#堆参数设置
Heap Configuration:
#空闲堆空间的最小百分比,如果当前堆空间空闲率<MinHeapFreeRatio,则需要进行堆扩容,扩容时机在垃圾回收之后
MinHeapFreeRatio = 40
#空闲堆空间的最大百分比,如果当前堆空间空闲率>MaxHeapFreeRatio,则需要进行堆缩容,缩容时机在垃圾回收之后
MaxHeapFreeRatio = 70
#最大堆内存
MaxHeapSize = 4294967296 (4096.0MB)
#新生代空间默认值
NewSize = 2147483648 (2048.0MB)
#新生代空间最大值
MaxNewSize = 2147483648 (2048.0MB)
#老年代空间默认值
OldSize = 2147483648 (2048.0MB)
#新生代与老年代空间比值
NewRatio = 2
#Survivor与eden区的空间比值,默认为8
SurvivorRatio = 8
#元空间默认值
MetaspaceSize = 268435456 (256.0MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
#元空间最大值
MaxMetaspaceSize = 536870912 (512.0MB)
#G1垃圾回收算法中每个region空间的大小
G1HeapRegionSize = 0 (0.0MB)
#堆内存使用详情
Heap Usage:
#新生代使用详情
New Generation (Eden + 1 Survivor Space):
capacity = 1968570368 (1877.375MB)
used = 1282502552 (1223.089744567871MB)
free = 686067816 (654.2852554321289MB)
65.14893106427171% used
Eden Space:
capacity = 1789657088 (1706.75MB)
used = 1263326968 (1204.8024826049805MB)
free = 526330120 (501.94751739501953MB)
70.59044866588431% used
From Space:
capacity = 178913280 (170.625MB)
used = 19175584 (18.287261962890625MB)
free = 159737696 (152.33773803710938MB)
10.717809209020146% used
To Space:
capacity = 178913280 (170.625MB)
used = 0 (0.0MB)
free = 178913280 (170.625MB)
0.0% used
#老年代使用详情
concurrent mark-sweep generation:
capacity = 2147483648 (2048.0MB)
used = 1218256848 (1161.8202667236328MB)
free = 929226800 (886.1797332763672MB)
56.72950521111488% used
- histo[:live]:打印堆中对象的统计信息,若带:live则值显示存活的对象,不带则是所有的
由于打印结果较多,所以我们一般会加上数量限制,在命令后面拼接 head -n(n为查看数量)
结果包含四列:
num(行号) | instances(实例数量) | bytes(对象占用总大小,单位为字节) | 类全限定名([C为char[]数组,[B为byte[]数组,[I为int[]数组) |
- clstats:打印类加载信息
- finalizerinfo:显示在F-Queue队列等待被清理的对象;F-Queue用来存放需要被GC回收的对象,清理时会执行对象的finalizer()方法;
- dump:生成堆存储快照
使用示例:其中:live为过滤出存活的对象,format=b代表以二进制的格式存储,file=jmap.bin代表存储的文件名,默认保存到当前目录,若file不指定则默认为java_pid.hprof
jmap -dump:live,format=b,file=jmap.bin 2469
因为保存的是bin文件,所以需要使用jvisualvm或者jhat打开。