jmap:Java内存映像工具
jmap:Java内存映像工具
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。如 果不使用jmap命令,要想获取Java堆转储快照也还有一些比较“暴力”的手段:譬如在第2章中用过的- XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在内存溢出异常出现之后自动生成堆转储 快照文件,通过-XX:+HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]键让虚拟机生成堆转储快 照文件,又或者在Linux系统下通过Kill-3命令发送进程退出信号“恐吓”一下虚拟机,也能顺利拿到堆转 储快照。jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的 详细信息,如空间使用率、当前用的是哪种收集器等。 和jinfo命令一样,jmap有部分功能在Windows平台下是受限的,除了生成堆转储快照的-dump选项 和用于查看每个类的实例、空间占用统计的-histo选项在所有操作系统中都可以使用之外,其余选项都 只能在Linux/Solaris中使用。
- jmap命令格式:
jmap [ option ] vmid
- 使用jmap生成dump文件
jmap -dump:format=b,file=eclipse.bin 3500
生成文件如下:
文件位置
生成的文件可以使用jhat进行分析
jhat testdump.txt
输出Server is ready.之后,通过浏览器访问 http://localhost:7000/,结果如下
jmap -finalizerinfo:显示在F-Queue中等待Finalizer线程执行的finalize方法对象
jmap -heap:显示堆详细信息
比如使用哪种回收器、参数配置,分代状况等
C:\Users\guangang>jmap -heap 5632
Attaching to process ID 5632, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 6410993664 (6114.0MB)
NewSize = 134217728 (128.0MB)
MaxNewSize = 2136997888 (2038.0MB)
OldSize = 268435456 (256.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 324534272 (309.5MB)
used = 38090976 (36.326385498046875MB)
free = 286443296 (273.1736145019531MB)
11.737119708577342% used
From Space:
capacity = 17825792 (17.0MB)
used = 0 (0.0MB)
free = 17825792 (17.0MB)
0.0% used
To Space:
capacity = 20971520 (20.0MB)
used = 0 (0.0MB)
free = 20971520 (20.0MB)
0.0% used
PS Old Generation
capacity = 334495744 (319.0MB)
used = 30265144 (28.86309051513672MB)
free = 304230600 (290.1369094848633MB)
9.04799075709615% used
27156 interned Strings occupying 2834160 bytes.