内存监控工具——>jmap

一、作用

命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

二、语法

jmap [option]

说明:
option:命令选项

1. -heap

  • 作用:打印Java堆概要信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况;

  • 示例:
    如下命令:jmap -heap 5352

    Attaching to process ID 6800, please wait...
    Debugger attached successfully.
    Client compiler detected.
    JVM version is 25.131-b11
    
    using thread-local object allocation.
    Mark Sweep Compact GC
    
    Heap Configuration:#堆内存初始化配置
       MinHeapFreeRatio         = 40  #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率  
       MaxHeapFreeRatio         = 70	 #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率 
       MaxHeapSize              = 268435456 (256.0MB) #-XX:MaxHeapSize=设置JVM堆的最大大小
       NewSize                  = 5570560 (5.3125MB)#-XX:NewSize=设置JVM堆的‘新生代’的默认大小
       MaxNewSize               = 89456640 (85.3125MB) #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
    
       OldSize                  = 11206656 (10.6875MB) #-XX:OldSize=设置JVM堆的‘老生代’的大小
       NewRatio                 = 2 #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
       SurvivorRatio            = 8 #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
       MetaspaceSize            = 12582912 (12.0MB)
    metaspace,元数据空间,专门用来存元数据的,它是jdk8里特有的数据结构用来替代perm(永久代)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)#-XX:CompressedClassSpaceSize=设置Klass Metaspace的大小,
       MaxMetaspaceSize         = 4294901760 (4095.9375MB)#用于设置metaspace区域的最大值,这个值可以通过mxbean中的MemoryPoolBean获取到,如果这个参数没有设置,那么就是通过mxbean拿到的最大值是-1,表示无穷大。
       G1HeapRegionSize         = 0 (0.0MB)#-XX:G1HeapRegionSize=n
    使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小. 默认值将根据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb.
    
    Heap Usage:
    New Generation (Eden + 1 Survivor Space):#新生代区内存分布,包含伊甸园区+1个Survivor区
       capacity = 5046272 (4.8125MB)
       used     = 1044400 (0.9960174560546875MB)
       free     = 4001872 (3.8164825439453125MB)
       20.696466619318183% used
    Eden Space:#Eden区内存分布
       capacity = 4521984 (4.3125MB)
       used     = 1044400 (0.9960174560546875MB)
       free     = 3477584 (3.3164825439453125MB)
       23.096056951992754% used
    From Space:#其中一个Survivor区的内存分布
       capacity = 524288 (0.5MB)
       used     = 0 (0.0MB)
       free     = 524288 (0.5MB)
       0.0% used
    To Space: #另一个Survivor区的内存分布
       capacity = 524288 (0.5MB)
       used     = 0 (0.0MB)
       free     = 524288 (0.5MB)
       0.0% used
    tenured generation:#当前的Old区内存分布  
       capacity = 11206656 (10.6875MB)
       used     = 0 (0.0MB)
       free     = 11206656 (10.6875MB)
       0.0% used
    
    1621 interned Strings occupying 129144 bytes.
    

2. -histo[:live]

  • 作用打印Java堆中对象直方图,通过该图可以获取每个class的对象数目,占用内存大小和类全名信息,带上:live,则只统计活着的对象
  • 示例:
    如下命令:
    jmap -histo 5352
    num     #instances         #bytes  class name
    ----------------------------------------------
       1:         36358        5287912  [C
       2:          6243        4726040  [B
       3:         18352        2429632  <constMethodKlass>
       4:         18352        1324168  <methodKlass>
       5:          7171        1145512  [I
       6:          1710        1071728  <constantPoolKlass>
       7:         32460         779040  java.lang.String
       8:          1710         680240  <instanceKlassKlass>
       9:          1485         614736  <constantPoolCacheKlass>
      10:         22541         540984  java.util.HashMap$Entry
      11:          5060         404800  java.lang.reflect.Method
      12:          5982         321680  [Ljava.lang.Object;
      ......
    

class name列出现了[C、[B、[L等很奇怪的内容,这些属于非自定义类,具体为:

BaseType CharacterTypeInterpretation
Bbytesigned byte
CcharUnicode character
Ddoubledouble-precision floating-point value
Ffloatsingle-precision floating-point value
Iintinteger
Jlonglong integer
L;referencean instance of class
Sshortsigned short
Zbooleantrue or false
[referenceone array dimension

3. -permstat

  • 作用:(1.8以后改为 -clstats) 打印永久代统计信息

4. -finalizerinfo

  • 作用:打印等待回收的对象信息
  • 示例:
    如下命令:
    jmap -finalizerinfo 5352
    Attaching to process ID 5352, please wait...
    Debugger attached successfully.
    Client compiler detected.
    JVM version is 24.60-b09
    Number of objects pending for finalization: 0
    
    Number of objects pending for finalization: 0 说明当前F-QUEUE队列中并没有等待Fializer线程执行finalizer方法的对象。

5. -dump:<dump-options>

  • 作用:以hprof二进制格式将Java堆信息输出到文件内,该文件可以用MAT、VisualVM或jhat等工具查看;

  • dump-options选项:

    • live 只输出活着的对象;不指定,则输出堆中所有对象
    • format=b 指定输出格式为二进制
    • file= 指定文件名及文件存储位置,例如:jmap -dump:live,format=b,file=G:\heap.bin

6. -F 与-dump:<dump-options> <pid>或-histo<pid>一起使用,当<pid>没有响应时,强制执行;注意:不支持live子选项

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值