Каков максимальный размер кучи по умолчанию для Sun JVM из Java SE 6? - PullRequest
62 голосов
/ 26 мая 2010

Каков максимальный размер кучи по умолчанию для JVM Sun от Java SE 6 (т. Е. Эквивалентно установке -Xmx)?

Похоже на Java SE 5 с машиной серверного класса, это

Меньше 1/4 физической памяти или 1 ГБ.

Бонусный вопрос: похоже на IBM JVM вы можете задать его

java -verbose:sizes -version

Можете ли вы так же спросить JVM от Sun?

Редактировать

Я использовал Runtime.getRuntime (). MaxMemory для подтверждения минимума (физическая память / 4, 1G), на который есть ссылка в документации Sun .

Ответы [ 6 ]

111 голосов
/ 10 февраля 2012

Java 1.6.0_21 или более поздняя версия или около того ...

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize                         := 12660904960      {product}

Похоже, что мин (1G) был удален.

Или в Windows, используя findstr

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize
15 голосов
/ 27 мая 2010

Можно спросить с помощью некоторого кода Java:

long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");

См. Javadoc .

14 голосов
/ 18 октября 2012

с JDK, Вы также можете использовать jinfo для подключения к JVM для рассматриваемого <PROCESS_ID> и получения значения MaxHeapSize:

jinfo -flag MaxHeapSize <PROCESS_ID>
8 голосов
/ 29 марта 2013

Начиная с JDK6U18 ниже приведены конфигурации для размера кучи.

В клиентской JVM конфигурация кучи Java по умолчанию была модифицировано, чтобы улучшить производительность сегодняшнего многофункционального клиента Приложения. Начальный и максимальный размеры кучи больше, а настройки связанные с сборкой мусора поколений лучше настроены.

Максимальный размер кучи по умолчанию составляет половину физической памяти до объема физической памяти 192 мегабайта, в противном случае - одна четвертая часть физическая память размером до 1 гигабайта. Например, если ваша машина имеет 128 мегабайт физической памяти, то максимальный размер кучи составляет 64 мегабайта и больше или равен до 1 гигабайта физической памяти приводит к максимальному размеру кучи 256 мегабайт. Максимальный размер кучи фактически не используется JVM, если ваша программа не создает достаточно объектов, чтобы это потребовать. Гораздо меньшее количество, называется начальным размером кучи, выделяется во время инициализации JVM. Эта сумма составляет не менее 8 мегабайт, а в остальном 1/64 физического память до физической памяти объемом 1 гигабайт.

Источник: http://www.oracle.com/technetwork/java/javase/6u18-142093.html

5 голосов
/ 26 мая 2010

Один из способов - если у вас установлен jdk, в папке bin есть утилита под названием jconsole (даже можно использовать visualvm). Запустите его и подключитесь к соответствующему процессу Java, и вы увидите, какие настройки размера кучи установлены, и многие другие подробности

При работе в автономном режиме или в режиме cli, jConsole можно использовать поверх локальной сети, если вы указали порт для подключения при запуске рассматриваемой службы.

3 голосов
/ 28 августа 2012

Чтобы ответить на этот вопрос, важно, находится ли Java VM в режиме КЛИЕНТА или СЕРВЕРА. Вы можете указать параметры "-client" или "-server". В противном случае Java использует внутренние правила; в основном win32 всегда клиент, а Linux всегда сервер, но смотрите таблицу здесь:

http://docs.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html

Документ Sun / Oracle jre6u18 сообщает клиенту: виртуальная машина получает половину физической памяти, если машина имеет <= 192 МБ; 1/4 памяти, если машина имеет <= 1 Гб; максимум 256 Мб. В моем тесте на 32-битной системе WindowsXP с физическим объемом 2 ГБ Java выделил 256 МБ, что соответствует документу. </p>

Документ Sun / Oracle jre6u18 говорит о сервере: то же самое, что и клиент, затем добавляет запутанный язык: для 32-битной JVM максимальное значение по умолчанию составляет 1 ГБ, а для 64-битной JVM значение по умолчанию составляет 32 ГБ. В моем тесте на 64-битной машине Linux с физическим объемом 8 ГБ Java выделяет 2 ГБ, что составляет 1/4 физического; на 64-битной машине Linux с 128 ГБ физической Java выделяет 32 ГБ, опять же 1/4 физической.

Спасибо этому ТАКому посту за руководство:

Определение машины серверного класса недавно изменилось?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...