2013-07-31 4 views
2

Есть ли где-нибудь, что hostspot JVM процесс хранит память, кроме этих мест:Как Hotspot Java/JVM хранит память?

  • завивки гена
  • штатного поколения
  • Эдема пространства
  • из космоса
  • в космос
  • кэш кода

То есть: Какие существуют возможные способы, чтобы процесс «горячей точки» мог зарезервировать & фиксации памяти на машине, так что указанная память не не найдена в статистике для одного из этих мест?

Некоторые ответы я могу думать (дайте мне знать, если это правда):

  • виртуальная память, используемая для стеков потоков не представлены в этих числах
  • любые загруженные DLLS или файлов.

EDIT:

некоторые другие ответы Дано: (., Например, от библиотек DLL)

  • java.exe сам
  • JNI методы могут выделить сам
  • любой машинный код памяти может выделить Память.
  • общие метаданные JVM для запуска себя.
+0

Собственный код будет выделять собственную память. Это, строго говоря, работает за пределами JVM, но это заставит вашу программу использовать больше памяти, чем она сообщает в этих числах. –

+0

Имейте в виду, что все вышеперечисленные «пространства» представляют собой одно конкретное семейство JVM (Hotspot) - нет ничего, что говорит о том, что каждая JVM имеет «пространство с эденом» или «пространство». Три основных пространства, присутствующих практически в любом процессе JVM, - это куча основного объекта, куча, используемая для информации о классе и кода, и куча «не-Java», используемая внутренними элементами JVM. (Можно утверждать, что исполняемый стек является еще одним «пространством» или считает его «не-Java».) –

ответ

1

Вы правы до сих пор (библиотеки DLL включают в себя все библиотеки JNI и любую память, которую они выделили). VM также имеет свой собственный код (например, содержимое java), бухгалтерскую информацию о памяти, выделенной для программ Java, и потенциально памяти, используемой агентами VM. В основном, то, что вы описали в своем первом списке, - это элементы, которые составляют «текущую память» виртуальной машины; остальная часть памяти JVM - это все элементы, которые представляют собой «аппаратные средства» виртуальной машины, такие как библиотеки, которые подключают ее к сети, графике и т. д.

+0

Были бы [файлы с отображением памяти] (http://msdn.microsoft.com/en-us/library/aa366556 % 28VS.85% 29.aspx) также не отображаются в статистике кучи/кодека? –

+1

Вы говорите о файлах с отображением памяти в Java? Единственный способ сделать это - «Buffer's», но в этом случае вы увидите некоторое использование памяти для полей Java для «Буфера», но не для области отображаемой памяти. Независимо от того, как ОС загружает сопоставленную память в процесс JVM, зависит от ОС. – chrylis

+0

Не нужно ли заряжать сопоставленную память в виртуальную память JVM? Как иначе процесс может даже прочитать его? –

Смежные вопросы