使用jmap查看堆和对象的信息

该文章系转载,原文链接 https://blog.csdn.net/infoflow/article/details/78160669

jmap概述

jmap工具提供了一系列有用的选项来查看堆的使用情况和新生代、老年代中对象的情况。
通过制定 -heap选项和运行java应用的jvm进程的pid(获取java应用的pid,可以使用
jps工具。),就能输出响应进程的新生代和老年代的情况。

使用jmap输出堆的信息

C:\Users\JavaMaster>jmap -heap 14584
jmap -heap 14584
Attaching to process ID 14584, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.112-b15

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2644508672 (2522.0MB)
   NewSize                  = 55050240 (52.5MB)
   MaxNewSize               = 881328128 (840.5MB)
   OldSize                  = 110624768 (105.5MB)
   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 = 418906112 (399.5MB)
   used     = 221504400 (211.24305725097656MB)
   free     = 197401712 (188.25694274902344MB)
   52.876860388229424% used
From Space:
   capacity = 524288 (0.5MB)
   used     = 0 (0.0MB)
   free     = 524288 (0.5MB)
   0.0% used
To Space:
   capacity = 8912896 (8.5MB)
   used     = 0 (0.0MB)
   free     = 8912896 (8.5MB)
   0.0% used
PS Old Generation
   capacity = 112197632 (107.0MB)
   used     = 19927224 (19.00408172607422MB)
   free     = 92270408 (87.99591827392578MB)
   17.76082404306002% used

21104 interned Strings occupying 2539648 bytes.

输出的主要信息:
* 堆的最小容量,最大容量
* eden区与survivor区的比值
* eden区的容量,使用的大小,未使用的区域的大小,使用的区域的比例
* 两个survivor区的容量,使用的大小,未使用的区域的大小,使用的区域的比例
* 老年代的容量,使用的大小,未使用的区域的大小,使用的区域的比例

使用jmap输出对象信息

C:\Users\JavaMaster>jmap -histo 14584

 num     #instances         #bytes  class name
----------------------------------------------
   1:       1664214       51285312  [Ljava.lang.Object;
   2:         33534       37954152  [I
   3:        318400       35074672  [C
   4:        723026       28921040  java.util.TreeMap$Entry
   5:        704904       22556928  java.io.ObjectStreamClass$WeakClassKey
   6:         55489       11788280  [B
   7:        220526        5292624  java.lang.Long
   8:        163309        3919416  java.lang.String
   9:         81638        3918624  java.util.TreeMap
  10:         98050        3137600  java.util.TreeMap$KeyIterator
  11:         31114        2986944  java.lang.management.ThreadInfo
  12:         88277        2118648  java.io.SerialCallbackContext
  13:         80792        1939008  javax.management.openmbean.CompositeDataSupport
  14:         93970        1868624  [Ljavax.management.openmbean.CompositeData;
  15:         16715        1738360  java.io.ObjectStreamClass
  16:         92098        1473568  java.lang.Boolean
  17:         58928        1414272  java.lang.StringBuilder
  18:         81599        1305584  java.util.TreeMap$KeySet
  19:         79467        1271472  java.util.TreeMap$EntrySet
  20:         23527        1129296  java.util.HashMap
  21:         29858         955456  java.lang.StackTraceElement
  22:          7805         886672  java.lang.Class
  23:         26892         860544  java.util.HashMap$Node
  24:         51123         817968  java.lang.Integer
  25:          9149         805112  java.lang.reflect.Method
  26:         10889         748992  [Ljava.util.HashMap$Node;
  27:         31117         736736  [Ljava.lang.StackTraceElement;
  28:         16713         668520  java.util.HashMap$KeyIterator
  29:         15965         609712  [Ljava.lang.String;
  30:         16824         538368  java.util.concurrent.ConcurrentHashMap$Node
  31:          1361         530584  [J
  32:          7954         445424  java.util.concurrent.ConcurrentHashMap$KeyIterator
  33:         18468         443232  java.lang.management.LockInfo
  34:          9846         339240  [Ljavax.management.ObjectName$Property;
  35:          8391         335640  java.io.ObjectStreamClass$FieldReflectorKey
  36:         10407         333024  java.io.DataOutputStream
  37:          5084         314944  [Ljava.io.ObjectInputStream$HandleTable$HandleList;

可以加给-histo加上live选项,只输出存活的对象
jmap -histo:live pid

输出的信息中带方括号的符号是java类型在jvm的表示式:
[C 等价于 char[]
[S 等价于 short[]
[I 等价于 int[]
[B 等价于 byte[]
[[I 等价于 int[][]

上面的输出中[C对象占用Heap这么多,往往跟String有关,String其内部使用
final char[]数组来保存数据的。

constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass

与Classloader相关,常驻与Perm区。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值