«Память общих объектов» и «Память кучи» - Java - PullRequest
13 голосов
/ 28 июля 2011

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

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

Ответы [ 3 ]

5 голосов
/ 28 июля 2011

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

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

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

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

1 голос
/ 28 июля 2011

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

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

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

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

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

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

0 голосов
/ 27 сентября 2011

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

...