"Общая память объектов" против "Память кучи" - Java
В чем разница между "Общая память объекта" и "Память кучи" в Java. Это похоже на "Общая память объектов" - это надмножество "Память кучи" ?
Источником этого вопроса является документация по jmap. Он предоставляет различные опции для печати "Общая память объекта" и "Память кучи" .
Ответы
Ответ 1
Из моего анализа до сих пор:
Параметр по умолчанию будет печатать всю информацию о памяти, включая:
- Память кучи
- Пермский генерал
- Другая память (включая JNI, пространство стека и т.д.)
Этот анализ, если на основании следующих данных:
В документах JDK упоминается, что параметры по умолчанию (который является "общей памятью объекта" ) аналогичны команде pmap Solaris. Глядя на команду pmap, кажется, что она печатает всю информацию о памяти.
Пожалуйста, добавьте комментарии, чтобы подтвердить это понимание.
Ответ 2
Java-память (до Java 8) состоит из трех частей:
- Память кучи.
- Память без кучи (PermGen).
- Другая память (собственные структуры JVM).
Память для всех экземпляров класса выделяется из кучи.
Память не-кучи в основном используется ClassLoaders для хранения связанных с классом данных.
Некоторые сведения об общих объектах приведены здесь: что такое файл общих объектов?.
Ответ 3
Общая память объектов - это то, где часто используемые классы библиотеки java являются отображенными в память, поэтому их можно загружать быстрее, чем загрузка из rt.jar. Это включает в себя многие обычно используемые классы, такие как Comparable
, String
, Object
и т.д. Если запрошенный файл класса недоступен в памяти общего объекта, он запрашивается у rt.jar. Его можно рассматривать как кеширование часто используемых классов в различных java-программах.