Вопрос-ответ

How is the default max Java heap size determined?

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

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


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


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

Переведено автоматически
Ответ 1

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

java -XX:+PrintFlagsFinal -version | findstr HeapSize

Ищите варианты MaxHeapSize (для -Xmx) и InitialHeapSize для -Xms.

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

java -XX:+PrintFlagsFinal -version | grep HeapSize

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

Ответ 2

Для Java SE 5: в соответствии с эргономикой сборщика мусора [Oracle]:


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


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


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


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


Обновить:

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


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



  • 2 или более физических процессора

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


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


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



  • начальный размер кучи 4 Мбайт

  • максимальный размер кучи 64 Мбайт


Ответ 3

Java 8 занимает более 1/64 вашей физической памяти для вашего 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.

Ответ 4

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

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

java