1、jmap命令概述

 jmap是一个可以输出内存中所有对象的工具。可以将JVM中的heap(堆),以二进制形式输出成文本。打印出某个java进程内存内所有'对象'的情况。

 

2、基本命令

 1、jmap -heap  <pid> : 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况。

 说明:pid指java进程号

 也可以将堆信息输出到文件中。jmap -heap pid >heap.txt

【JVM】jmap命令使用
    





            
 

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(类名)。它基本是按照使用使用大小逆序排列的。

 【JVM】jmap命令使用
    





            
 

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

 【JVM】jmap命令使用
    





            
 

将dump输出的outfile文件使用MAT(内存分析工具(Memory Analysis Tool))  或与 jhat(Java Heap Analysis Tool) 一起使用,能够以图像的形式直观展示当前内存是否有问题。

 

4、jmap -finalizerinfo  <pid> : 打印正在等候回收的信息

 【JVM】jmap命令使用
    





            
 

  【JVM】jmap命令使用
    





            
 

 

 

 

 

 参考地址

 https://www.cnblogs.com/qq78292959/p/5141209.html

 https://www.cnblogs.com/huanglog/p/10302901.html

分类:

技术点:

相关文章: