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

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

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

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

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

java -verbose:sizes -version

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

Edit

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

Ответ 1

java 1.6.0_21 или более поздней версии, или так...

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

Похоже, что min (1G) удален.

Или в Windows с помощью findstr

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize

Ответ 2

Можно запросить код Java:

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

Смотрите javadoc.

Ответ 3

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

jinfo -flag MaxHeapSize <PROCESS_ID>

Ответ 4

В качестве 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

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

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

Ответ 6

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

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

Sun/Oracle jre6u18 doc говорит re client: VM получает 1/2 физической памяти, если машина имеет <= 192MB; 1/4 памяти, если машина имеет <= 1Gb; макс. 256 Мб. В моем тесте на 32-битной системе WindowsXP с памятью 2Gb, Java выделил 256 Мб, что согласуется с документом.

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

Благодаря этому сообщению SO для руководства меня:

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