Как определяется размер кучи Java по умолчанию? - PullRequest
369 голосов
/ 12 января 2011

Если я опущу параметр -Xmxn в командной строке Java, будет использовано значение по умолчанию.Согласно документации Java

"значение по умолчанию выбирается во время выполнения на основе конфигурации системы"

Какие параметры конфигурации системы влияют на значение по умолчанию?

Ответы [ 9 ]

459 голосов
/ 14 декабря 2012

В Windows вы можете использовать следующую команду, чтобы узнать значения по умолчанию в системе, где работают ваши приложения.

java -XX: + PrintFlagsFinal -version |findstr HeapSize

Найдите параметры MaxHeapSize (для -Xmx) и InitialHeapSize для -Xms.

В системе Unix / Linux вы можете сделать

java -XX: + PrintFlagsFinal -version |grep HeapSize

Я полагаю, что результат будет в байтах.

106 голосов
/ 12 января 2011

Согласно Эргономика сборщика мусора [Oracle] :

начальный размер кучи:

Больше 1/64 от физической памяти машины на машине или некоторой разумный минимум. До J2SE 5.0, начальный размер кучи по умолчанию был разумный минимум, который варьируется в зависимости от Платформа. Вы можете переопределить это по умолчанию используется командная строка -Xms опция.

максимальный размер кучи:

Меньше 1/4 физической памяти или 1 ГБ. До J2SE 5.0 максимальный размер кучи по умолчанию был 64 МБ. Вы можете изменить это значение по умолчанию, используя параметр командной строки -Xmx.

UPDATE:

Как отметил Том Андерсон в своем комментарии, приведенное выше относится к машинам серверного класса. С Эргономика в виртуальной машине JavaTM 5.0 :

В платформе J2SE версии 5.0 a Класс машины называется машина серверного класса была определена как машина с

  • 2 или более физических процессора
  • 2 или более Гбайт физической памяти

за исключением 32-битных платформ под управлением версии Windows операционная система. На все остальные Платформы значения по умолчанию являются такие же как значения по умолчанию для версии 1.4.2.

В платформе J2SE версии 1.4.2 по умолчанию следующие выборы были сделал

  • начальный размер кучи 4 Мбайт
  • максимальный размер кучи 64 Мбайт
28 голосов
/ 30 октября 2012

Это изменяется в Обновление Java 6 18 .

Если предположить, что у нас более 1 ГБ физической памяти (довольно часто в наши дни), это всегда1/4 вашей физической памяти.

19 голосов
/ 12 апреля 2017

Java 8 занимает более 1/6 вашей физической памяти для вашего Xmssize (минимальный размер кучи) и менее 1/4 вашей физической памяти для вашего -Xmxsize (максимальный размер кучи).

Вы можете проверить размер кучи Java по умолчанию по:

В Windows :

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

В Linux :

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Какие параметры конфигурации системы влияют на значение по умолчанию?

Ваша физическая память и версия Java.

15 голосов
/ 09 ноября 2012

Эрнесто прав.По ссылке, которую он разместил [1]:

Обновлена ​​конфигурация кучи JVM клиента

В клиентской JVM ...

  • максимальный размер кучи по умолчанию составляет половину физической памяти до объема физической памяти 192 мегабайта, в противном случае четверть физической памяти - до объема физической памяти 1 гигабайт.

    Например, если ваша машина имеет 128 мегабайт физической памяти, то максимальный размер кучи составляет 64 мегабайта, а если размер физической памяти больше или равен 1 гигабайту, максимальный размер кучи составляет 256 мегабайт.

  • Максимальный размер кучи фактически не используется JVM, если ваша программа не создает достаточно объектов, чтобы потребовать его.Гораздо меньшее количество, называемое начальным размером кучи, выделяется во время инициализации JVM....

  • ...
  • Эргономика конфигурации кучи JVM сервера теперь такая же, как у клиента, за исключением того, что максимальный размер кучи по умолчанию для 32-разрядных JVM равен1 гигабайт соответствует физическому объему памяти 4 гигабайта, а для 64-битных виртуальных машин Java составляет 32 гигабайта , что соответствует объему физической памяти 128 гигабайт.

[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html

7 голосов
/ 13 октября 2016

значение по умолчанию выбирается во время выполнения на основе конфигурации системы

Ознакомьтесь с документацией страница

Размер кучи по умолчанию

Если в командной строке не указаны начальный и максимальный размеры кучи, они рассчитываются на основе объема памяти на компьютере.

  1. Клиентская JVMНачальный и максимальный размеры кучи по умолчанию:

    Максимальный размер кучи по умолчанию составляет половина физической памяти до объема физической памяти 192 мегабайта (МБ) , а в остальном четвертьфизическая память размером до 1 гигабайта (ГБ) .

  2. Размеры JVM сервера по умолчанию Начальный и максимальный размеры кучи:

    В 32-разрядном режимеJVM, максимальный размер кучи по умолчанию может составлять до 1 ГБ, если имеется 4 ГБ или более физической памяти . В 64-разрядных JVM максимальный размер кучи по умолчанию может составлять до 32 ГБ, если имеется 128 ГБ или более физической памяти

Какая системапараметры конфигурации влияют на значение по умолчанию?

Вы можете указать начальный и максимальный размеры кучи с помощью флагов -Xms (начальный размер кучи) и -Xmx (максимальный размер кучи).Если вы знаете, сколько кучи требуется вашему приложению для правильной работы, вы можете установить для -Xms и -Xmx одинаковое значение

7 голосов
/ 03 сентября 2015

Для IBM JVM команда выглядит следующим образом:

java -verbose:sizes -version

Для получения дополнительной информации о IBM SDK для Java 8: http://www -01.ibm.com / support / Knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html?lang=en

4 голосов
/ 06 февраля 2019

Ряд параметров влияет на размер генерации. Следующая диаграмма иллюстрирует разницу между выделенным пространством и виртуальным пространством в куче. При инициализации виртуальной машины все пространство для кучи резервируется. Размер зарезервированного пространства можно указать с помощью опции -Xmx. Если значение параметра -Xms меньше значения параметра -Xmx, не все зарезервированное пространство немедленно выделяется для виртуальной машины. На этом рисунке незафиксированное пространство обозначено как «виртуальное». Различные части кучи (постоянное поколение, постоянное поколение и молодое поколение) могут увеличиваться до предела виртуального пространства по мере необходимости.

enter image description here

По умолчанию виртуальная машина увеличивает или уменьшает кучу в каждой коллекции, чтобы попытаться сохранить пропорцию свободного пространства для живых объектов в каждой коллекции в пределах определенного диапазона. Этот целевой диапазон задается в процентах параметрами - XX:MinHeapFreeRatio=<minimum> и -XX:MaxHeapFreeRatio=<maximum>, а общий размер ограничен снизу -Xms<min> и выше -Xmx<max>.

Значение параметра по умолчанию

MinHeapFreeRatio 40

MaxHeapFreeRatio 70

-Xms 3670k

-Xmx 64 м

Значения по умолчанию для параметров размера кучи в 64-битных системах были увеличены примерно на 30%. Это увеличение предназначено для компенсации большего размера объектов в 64-битной системе.

С этими параметрами, если процент свободного пространства в поколении падает ниже 40%, поколение будет расширено, чтобы сохранить 40% свободного пространства, до максимально допустимого размера поколения. Точно так же, если свободное пространство превышает 70%, генерация будет сокращена, так что только 70% пространства будет свободным, при условии минимального размера генерации.

Крупные серверные приложения часто испытывают две проблемы с этими значениями по умолчанию. Один из них - медленный запуск, потому что начальная куча мала и должна быть изменена во многих основных коллекциях. Более насущная проблема заключается в том, что максимальный размер кучи по умолчанию неоправданно мал для большинства серверных приложений. Практические правила для серверных приложений:

  • Если у вас нет проблем с паузами, попробуйте выделить столько памяти, сколько возможно на виртуальной машине. Размер по умолчанию (64 МБ) часто слишком маленький.
  • Установка -Xms и -Xmx на одно и то же значение повышает предсказуемость на удаление наиболее важного решения по размеру виртуальной машины. Тем не менее, виртуальная машина не сможет компенсировать, если вы делаете плохой выбор.
  • Как правило, увеличивайте объем памяти по мере увеличения числа процессоры, так как распределение может быть распараллелено.

    Полный текст статьи

3 голосов
/ 11 апреля 2019

Xms и Xmx - это флаг виртуальной машины Java (JVM):

  • Xms: initial and minimum JVM heap size
    • Format: -Xmx<size>[g|G|m|M|k|K]
    • Default Size:
      • -server Режим: 25% свободной физической памяти,> = 8 МБ и <= 64 МБ </li>
      • -client mode: 25% свободной физической памяти,> = 8 МБ и <= 16 МБ </li>
    • Typical Size:
      • -Xms128M
      • -Xms256M
      • -Xms512M
    • Function / Effect:
      • -> JVM запускается с выделением Xms памяти размера
  • Xmx: maximum JVM heap size
    • Format: -Xmx<size>[g|G|m|M|k|K]
    • Default Size:
      • <= R27.2
        • Windows: 75% от общей физической памяти до 1GB
        • Linux/Solaris: 50% доступной физической памяти до 1GB
      • >= R27.3
        • Windows X64: 75% от общей физической памяти до 2GB
        • Linux/Solaris X64: 50% из доступныхфизическая память до 2GB
        • Windows x86: 75% от общей физической памяти до 1GB
        • Linux/Solaris X86: 50% доступной физической памяти до 1GB
    • Typical Size:
      • -Xmx1g
      • -Xmx2084M
      • -Xmx4g
      • -Xmx6g
      • -Xmx8g
    • Function/ Effect:
      • -> JVM позволяет использовать максимум Xmx размер памяти
        • при превышении Xmx, будет java.lang.OutOfMemoryError
          • Как исправить OutOfMemoryError?
            • превышает Xmx значение
              • например: от -Xmx4g до -Xmx8g

Подробнее

см. Официальный документ: -X Опции командной строки

...