Использует ли JDK 7 несмежную кучу?

Я знаю, что JDK 7 должен быть слиянием между точками доступа и jrockit и что jrockit 1.7 не будет. (Источник: https://blogs.oracle.com/henrik/entry/java_7_questions_answers) У меня есть проект, для которого требуется функция несмежной кучи jrockit, а также некоторые функции java 1.7, поэтому, поскольку JDK 7 является слиянием, поддерживает ли он несмежную кучу, потому что я не могу найти официальную документацию, которая так говорит?


person shawn    schedule 10.08.2012    source источник
comment
На ваш вопрос нет ответа на странице, на которую вы ссылаетесь, в разделе «Получит ли конвергентная JVM функцию, позволяющую JRockit выделять больше кучи в Windows?»   -  person Damien_The_Unbeliever    schedule 10.08.2012


Ответы (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 Мб.

Надеюсь, это поможет.

person Gili    schedule 03.07.2013
comment
Звучит хорошо, но я сделал несколько тестов, и он вел себя так же. Вероятно, они означают, что непрерывная куча разбита на разделы для лучшего GC. Но что-то странное. Я указал 1 г, а VisualVM показывает мне максимум 2 г... - person Stroboskop; 29.07.2014