Максимальный размер кучи, используемый для процесса Java в Windows 10 64-разрядная версия работает под управлением 64-разрядной JVM
Каков максимальный размер кучи для процесса Java, работающего в Windows 10 64-битной, с 64-битной JVM? У моей машины 8 ГБ оперативной памяти. И я использую Java 8. Я пытаюсь запустить BFS на огромном графике для экспериментальных целей. Во время работы BFS я наблюдаю за размером кучи, используемой в Java Visual VM. Согласно Visual VM использование кучи всегда составляет менее 2000 МБ независимо от предоставления следующих параметров JVM
-Xms2048m
-Xmx3072m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
Я провел какое-то исследование через Интернет, но не смог найти какого-либо конкретного ответа, касающегося используемой мной спецификации системы. Может ли процесс Java использовать более 2 ГБ в Windows 10 64-разрядной и 64-разрядной JVM? В качестве руководства по настройке размера кучи Java ограничение для Windows XP/2008/7 составляет 2 ГБ.
Спасибо брат
3 ответа
На 64-битной машине с 64-битной JVM вы можете работать с кучами в несколько гигабайт (десятки и десятки гигабайт). Я не уверен, что он каким-либо образом ограничен, кроме как доступной памятью (и теоретическим адресным пространством 64-битного указателя).
Конечно, если вы работаете с огромной кучей, у GC гораздо больше работы, и вы можете обнаружить, что вам нужно масштабировать горизонтально, а не вертикально, чтобы поддерживать хорошую производительность.
Если VisualVM не показывает использование более 2 ГБ (начальный размер кучи, заданный с -Xms
), то, вероятно, просто не нужно больше, чем это. Вы дали разрешение на использование до 3 ГБ (-Xmx
), но JVM не будет выделять больше памяти только для удовольствия.
Максимальная куча может быть выделена для 32-битной JVM: 2^32 = 4 ГБ. Опять же, 4 ГБ будут разделены на 1 ГБ для ВМ, которые будут использоваться для классов выполнения. Это варьируется окна это ~2 ГБ и Linux это ~3 ГБ. Поскольку вы используете 64-битную машину, максимальная доступная куча составляет 2^64, она будет достаточно большой, чтобы вы могли легко запускать BFS.
Вы можете отслеживать доступную память, используя vm flags "-XX+PrintFlagsFinal | grep -iE HeapSize" сообщит вам максимальный доступный размер кучи, который можно использовать. Настроить чуть меньше и начать использовать...
Не существует определенного размера, который вы могли бы указать для 64-битной архитектуры, но простой тест помогает вам определить, какое максимальное непрерывное пространство доступно или может быть выделено для процесса. Это можно проверить следующим образом, используя простую команду. Попробуйте, как показано ниже: java -Xmx -version Если приведенная выше команда дает результат, тогда вашей системе может быть разрешено иметь Xmx до этого уровня. Если это не удастся, вы не сможете указать это значение.
Несколько тестов из системы. Я проверил значение с 20G.40g,100G,160G,300G, все это дало вывод java-версии, но попробовал с 1600G, который выдает ошибку. Вывод теста C:\Users\mpalanis>java -Xmx300G -version
Java-версия "1.7.0_80" Java(TM) SE Runtime Environment (сборка 1.7.0_80-b15) Java HotSpot(TM) 64-битная виртуальная машина сервера (сборка 24.80-b11, смешанный режим)
C: \ Users \ mpalanis> java -Xmx1600G -version
Произошла ошибка во время инициализации виртуальной машины. Невозможно выделить 52431424 КБ точечных рисунков для параллельной сборки мусора для запрошенной кучи 1677805568 КБ.
Ошибка: не удалось создать виртуальную машину Java.
Ошибка: произошло фатальное исключение. Программа будет закрыта.
Надеюсь, это объяснение поможет.
Если вы используете IntelliJ Idea в качестве IDE, вы можете сделать это прямо из нее,
- В главном меню выберите Help | Изменить настройки памяти
- Установите необходимый объем памяти, который вы хотите выделить, и нажмите "Сохранить и перезапустить".
Это изменяет значение параметра -Xmx, используемого JVM, и перезапускает IntelliJ IDEA с новым параметром.