如何使⽤jmap?
jmap的使⽤说明
⽂章⽬录
⼀、jamp的作⽤
⼆、语法及说明
三、 举例说明
⼀、jamp的作⽤
作⽤:监控内存内的Java对象
⼆、语法及说明
语法:
jmap [option] <pid>
说明:
option:命令选项,常⽤选项如下:
-heap: 打印Java堆概要信息,包括使⽤的GC算法、堆配置参数和各代中堆内存使⽤情况;
-histo[:live]: 打印Java堆中对象直⽅图,通过该图可以获取每个class的对象数⽬,占⽤内存⼤⼩和类全名信息,带上:live,则只                                      统计活着的对象 ;
-permstat 打印永久代统计信息;
-finalizerinfo 打印等待回收的对象信息
-dump:<dump-options> 以hprof⼆进制格式将Java堆信息输出到⽂件内,该⽂件可以⽤MAT、VisualVM或jhat等⼯具查看;
jdk怎么使用dump-options选项:
live 只输出活着的对象;不指定,则输出堆中所有对象
format=b 指定输出格式为⼆进制
file=<file> 指定⽂件名及⽂件存储位置,例如:jmap -dump:live,format=b,file=D:\heap.bin <pid>
-F 与-dump:<dump-options> <pid>或-histo<pid>⼀起使⽤,当<pid>没有响应时,强制执⾏;注意:不⽀持live⼦选项
pid:进程id
三、 举例说明
step1:获得进程的id,在这⾥获得eclipse的pid,有两种⽅法:
⽅法1:点击任务管理器——>详细信息就能看到eclipse进程的pid,如下图所⽰:
⽅法2:点击Win+R,输⼊cmd,在该页⾯处输⼊jps,也能够得到Eclipse进程的pid,如下图所⽰:
step2:依次输⼊个表达式:
①-heap,在cmd中执⾏如下命令,将输出的结果导⼊到⽂件中,便于分析,如下图所⽰:    输出结果:
Attaching to process ID 8124,
Debugger attached successfully.
Client compiler detected.
JVM version is 25.131-b11
using thread-local object allocation.
Garbage-First (G1) GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio        = 40 //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最⼩空闲⽐率(defalut 40)
MaxHeapFreeRatio        = 70 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最⼤空闲⽐率(default 70)
MaxHeapSize              = 1073741824 (1024.0MB) //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最⼤⼤⼩
NewSize                  = 1048576 (1.0MB) //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新⽣代’的默认⼤⼩
MaxNewSize              = 643825664 (614.0MB)//对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新⽣代’的最⼤⼤⼩
OldSize                  = 4194304 (4.0MB)//对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘⽼⽣代’的⼤⼩
NewRatio                = 2//对应jvm启动参数-XX:NewRatio=:‘新⽣代’和‘⽼⽣代’的⼤⼩⽐率
SurvivorRatio            = 8//对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的⼤⼩⽐值
//从这⾥可以看出JDK8开始,永久代已经被元空间所取代
MetaspaceSize            = 12582912 (12.0MB)对应jvm启动参数-XX:MetaspaceSize=<value>:设置JVM堆的‘元空间’的初始⼤⼩
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize        = 4294901760 (4095.9375MB)//对应jvm启动参数-XX:MaxMetaspaceSize= :设置JVM堆的‘元空间’的最⼤⼤⼩  G1HeapRegionSize        = 1048576 (1.0MB)
Heap Usage://堆内存分布
G1 Heap:
regions  = 1024
capacity = 1073741824 (1024.0MB)
used    = 99890608 (95.26310729980469MB)
free    = 973851216 (928.7368927001953MB)
9.303037822246552% used
G1 Young Generation://新⽣代的内存分布
Eden Space://Eden区内存分布
regions  = 9
capacity = 142606336 (136.0MB) //Eden区总容量
used    = 9437184 (9.0MB) //Eden区已使⽤
free    = 133169152 (127.0MB) //Eden区剩余容量
6.617647058823529% used used  //Eden区使⽤⽐率
Survivor Space: //其中⼀个Survivor区的内存分布
regions  = 14
capacity = 14680064 (14.0MB)
used    = 14680064 (14.0MB)
free    = 0 (0.0MB)
100.0% used
G1 Old Generation://⽼年代的内存分布
regions  = 74
capacity = 111149056 (106.0MB)
used    = 75773360 (72.26310729980469MB)
free    = 35375696 (33.73689270019531MB)
68.1727427356648% used
60745 interned Strings occupying 5993360 bytes.
②-histo,在cmd中执⾏如下命令,将输出的结果导⼊到⽂件中,便于分析,如下图所⽰:
输出部分结果如下:
class name列出现了[C、[B、[L等很奇怪的内容,这些属于⾮⾃定义类,具体为:
BaseType Character Type Interpretation
B byte signed byte
C char Unicode character
BaseType Character Type Interpretation
D double double-precision floating-point value
F float single-precision floating-point value
I int integer
J long long integer
L;reference an instance of class
S short signed short
Z boolean true or false
[reference one array dimension
-permstat 打印永久代统计信息:如下图所⽰,由于使⽤jdk是1.8,jdk1.8已经删除了永久代,取⽽代之的是新⽣代,因此⽆法⽆法得到永
久代的信息
jstat -gc <pid> :Metaspace的信息会被打印出来,如下⾯的例⼦所⽰:
Attaching to process ID 8124,
Debugger attached successfully.
Client compiler detected.
JVM version is 25.131-b11
Number of objects pending for finalization: 0 //说明当前F-QUEUE队列中并没有等待Fializer线程执⾏finalizer⽅法的对象
④-dump:<dump-options>,在cmd中执⾏如下命令,
输出结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。