Возможно ли иметь несколько куч в java? Если это возможно, то в каких случаях это происходит?Возможно ли иметь несколько куч в java?
ответ
Существует уже несколько областей памяти, но только одна куча 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.
Поскольку существует только одна кучи внутри экземпляра виртуальной машины Java, вам нужно несколько JVM для кратной кучи
Java Virtual Machine Architecture - вы можете увидеть Heap области только один в Java виртуальной машины
Я просто интересно - почему? Возможно, вы могли бы выполнить это через несколько jvm. – vikingsteve
Спецификация JVM указывает, что каждый исполняемый экземпляр JVM должен иметь одну кучу. Что вы подразумеваете под несколькими кучами? .. вы можете * изменить размер кучи * для JVMs. – TheLostMind
Так что невозможно иметь 2 кучи в одном jvm? –