Я знаю, что JDK 7 должен быть слиянием между точками доступа и jrockit и что jrockit 1.7 не будет. (Источник: https://blogs.oracle.com/henrik/entry/java_7_questions_answers) У меня есть проект, для которого требуется функция несмежной кучи jrockit, а также некоторые функции java 1.7, поэтому, поскольку JDK 7 является слиянием, поддерживает ли он несмежную кучу, потому что я не могу найти официальную документацию, которая так говорит?
Использует ли JDK 7 несмежную кучу?
Ответы (1)
Я предполагаю, что вы спрашиваете о несмежных кучах, потому что страдаете от фрагментации памяти. В большинстве случаев ваше 32-битное адресное пространство фрагментировано, а 64-битное — нет. Это означает, что если на вашем компьютере достаточно памяти, использование 64-битной JVM позволит вам найти непрерывную память, которую не сможет найти 32-битная JVM. Я лично использовал 64-разрядную JVM для выделения кучи размером более 4 ГБ, когда 32-разрядная JVM не смогла выделить кучу более 2 ГБ.
Хотя это не похоже на то, что произвольные несмежные кучи попали в JDK 7, вы можете попробовать использовать сборщик мусора G1. Согласно http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html:
Куча разделена на набор областей кучи одинакового размера, каждая из которых представляет собой непрерывный диапазон виртуальной памяти.
Теоретически это позволяет вам играть с несмежной кучей. Единственным ограничением является то, что регионы должны быть одинакового размера.
Согласно http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html#t6 вы можете использовать этот параметр командной строки для управления размером области:
-XX:G1HeapRegionSize=n: с G1 куча Java подразделяется на области одинакового размера. Это устанавливает размер отдельных подразделений. Значение по умолчанию для этого параметра определяется с точки зрения эргономики в зависимости от размера кучи. Минимальное значение — 1 Мб, максимальное — 32 Мб.
Надеюсь, это поможет.