Что именно печатает "jmap -histo pid"

Я использую команду "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. Это текущий выделенный размер в куче всех объектов

Может быть, кто-то может объяснить мне, что такое "#instances".

1 ответ

Решение

Это сводка текущего содержимого кучи Java, сгруппированного по классу объекта.

  • #instances общее количество объектов данного класса (как достижимых, так и недоступных) в Java Heap;
  • #bytes это общий мелкий размер объектов данного класса, в настоящее время находящихся в Java Heap;
  • #bytes / #instances будет средний размер объекта данного класса.
Другие вопросы по тегам