什么“jmap -histo pid”准确打印

时间:2018-03-26 11:11:43

标签: java memory garbage-collection jvm jmap

我正在使用命令“jmap -histo pid”,想知道它究竟告诉了我什么。

输出类似于:

 num     #instances         #bytes  class name
----------------------------------------------
   1:       2284437      262114728  [C
   2:        686409      124390432  [B
   3:        363878       46799288  <constMethodKlass>
   4:        363878       46590464  <methodKlass>
   5:       1817209       43613016  java.lang.String
   6:         34590       37296528  <constantPoolKlass>
   7:        296302       36673344  [I
   8:         34585       33237656  <instanceKlassKlass>
   9:        248731       21559504  [Ljava.lang.Object;
  10:         28200       19991872  <constantPoolCacheKlass>
  11:        563323       13519752  scala.collection.immutable.$colon$colon
  12:         26813       13103488  <methodDataKlass>
  13:        506968       12167232  scala.collection.immutable.HashSet$HashSet1
  14:        200750       10371320  [Lscala.collection.immutable.HashSet;
  15:        114268        9477096  [Lscala.collection.immutable.HashMap;
  16:         92405        7392400  java.lang.reflect.Method
  17:        200953        6430496  scala.collection.immutable.HashMap$HashMap1

通过示例:什么是“字节”正好显示?

  1. 是此类型的每个实例的平均大小
  2. 是自应用程序启动以来创建的所有对象的总大小
  3. 是所有对象堆中当前分配的大小
  4. 也许有人可以向我解释什么是“#instances”。

1 个答案:

答案 0 :(得分:1)

这是按对象类分组的当前Java堆内容的摘要。

  • #instances是Java堆中给定类(可达和不可达)的对象总数;
  • #bytes是当前驻留在Java堆中的给定类的对象的总浅层大小;
  • #bytes / #instances将是给定类的对象的平均大小。