Подтвердить что ты не робот

"Общая память объектов" против "Память кучи" - Java

В чем разница между "Общая память объекта" и "Память кучи" в Java. Это похоже на "Общая память объектов" - это надмножество "Память кучи" ?

Источником этого вопроса является документация по jmap. Он предоставляет различные опции для печати "Общая память объекта" и "Память кучи" .

4b9b3361

Ответ 1

Из моего анализа до сих пор:

Параметр по умолчанию будет печатать всю информацию о памяти, включая:

  • Память кучи
  • Пермский генерал
  • Другая память (включая JNI, пространство стека и т.д.)

Этот анализ, если на основании следующих данных:

В документах JDK упоминается, что параметры по умолчанию (который является "общей памятью объекта" ) аналогичны команде pmap Solaris. Глядя на команду pmap, кажется, что она печатает всю информацию о памяти.

Пожалуйста, добавьте комментарии, чтобы подтвердить это понимание.

Ответ 2

Java-память (до Java 8) состоит из трех частей:

  • Память кучи.
  • Память без кучи (PermGen).
  • Другая память (собственные структуры JVM).

Память для всех экземпляров класса выделяется из кучи. Память не-кучи в основном используется ClassLoaders для хранения связанных с классом данных.

Некоторые сведения об общих объектах приведены здесь: что такое файл общих объектов?.

Ответ 3

Общая память объектов - это то, где часто используемые классы библиотеки java являются отображенными в память, поэтому их можно загружать быстрее, чем загрузка из rt.jar. Это включает в себя многие обычно используемые классы, такие как Comparable, String, Object и т.д. Если запрошенный файл класса недоступен в памяти общего объекта, он запрашивается у rt.jar. Его можно рассматривать как кеширование часто используемых классов в различных java-программах.