2014-12-18 3 views
1

Возможно ли иметь несколько куч в java? Если это возможно, то в каких случаях это происходит?Возможно ли иметь несколько куч в java?

+0

Я просто интересно - почему? Возможно, вы могли бы выполнить это через несколько jvm. – vikingsteve

+0

Спецификация JVM указывает, что каждый исполняемый экземпляр JVM должен иметь одну кучу. Что вы подразумеваете под несколькими кучами? .. вы можете * изменить размер кучи * для JVMs. – TheLostMind

+0

Так что невозможно иметь 2 кучи в одном jvm? –

ответ

8

Существует уже несколько областей памяти, но только одна куча Java как таковая.

Обычно существует;

  • Java кучи, которая может быть разбита на
    • Иден пространство,
    • Survivor Пробелы,
    • землевладений пространство.
  • Внутренняя куча памяти для небольшого прямого распределения памяти. например ByteBuffer.allocateDirect(4) См. missing [heap] section in /proc/pid/maps для интересного обсуждения области [heap] в родном пространстве.
  • Анонимное отображение памяти для больших прямых распределений. ByteBuffer.allocateDirect(10000000)
  • Стеллаж для резьбы. то есть локальные переменные в методе.
  • Perm Gen или MetaSpace для кода. Когда вы байт код и JIT скомпилированный код идет
  • Общие библиотеки для собственного кода. Это включает DLL/SO и почему «hello world», похоже, использует так много памяти.
  • Отображаемые области файлов с памятью. например FileChannel.map (..)
  • Другие регионы редко используются напрямую, например, VDSO. Доступно только через JNI или Unsafe.

Когда вы говорите «куча», это относится к первому, к которому вы можете естественным образом распределить объект Java, и управляет сборщик мусора. На самом деле, есть и родная «куча», но это не взаимозаменяемо и имеет совсем другую цель, ведь большинству разработчиков Java никогда не понадобится знать, что она существует.

Примечание: это то, как JVM реализована в Windows и Linux, в стандарте нет ничего, что говорит о том, что они должны существовать для работы Java.

1

Поскольку существует только одна кучи внутри экземпляра виртуальной машины Java, вам нужно несколько JVM для кратной кучи

Java Virtual Machine Architecture - вы можете увидеть Heap области только один в Java виртуальной машины

enter image description here

refer link for JVM Internals