«Общая объектная память» против «кучной памяти» — Java

В чем разница между «Общей объектной памятью» и «Кучной памятью» в Java. Это похоже на то, что «общая объектная память» является надмножеством «памяти кучи»?

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


person Sandeep Jindal    schedule 28.07.2011    source источник
comment
Я предлагаю вам попробовать запустить его.   -  person Peter Lawrey    schedule 28.07.2011
comment
Документ jmap говорит: «Если параметр не используется, jmap печатает сопоставления общих объектов». Вы можете запустить jmap без опций? Для меня он просто печатает инструкции по использованию (при запуске jmap pid).   -  person Andrey    schedule 28.07.2011
comment
Если вы используете JDK6, в jmap forums.oracle.com есть ошибка. /форумы/. Jmap без параметров jn JDK6 ведет себя как jmap -heap   -  person Andrei Petrenko    schedule 28.07.2011
comment
В дополнение к иронии, в Google «Общая объектная память» + Java почти все ссылки показали объяснение jmap. Sun/Oracle использовали этот термин в «известном» инструменте, но забыли объяснить этот термин.   -  person Sandeep Jindal    schedule 28.07.2011


Ответы (3)


Память Java (до Java 8) состоит из 3 частей:

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

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

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

person Andrei Petrenko    schedule 28.07.2011

Из моего анализа на данный момент:

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

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

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

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

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

person Sandeep Jindal    schedule 28.07.2011

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

person Param    schedule 27.09.2011