Xmxsize по умолчанию в Java 8



на документация oracle Я нашел:




- Xmxsize задает максимальный размер (в байтах) пула выделения памяти в байтах ... Неисполнение
значение выбирается во время выполнения на основе конфигурации системы.




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

13396   4  

4 ответов:

это зависит от реализации и версии, но обычно это зависит от используемой виртуальной машины (например, клиент или сервер, см. -client и -server параметры) и в системе памяти.

часто его значение по умолчанию-1/4 от вашей физической памяти или 1 ГБ (в зависимости от того меньше).

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

вы можете запустить следующую команду, чтобы увидеть значения по умолчанию:

java -XX:+PrintFlagsFinal -version

это дает вам список loooong,-Xmx - в MaxHeapSize,-Xms находится в InitialHeapSize. Отфильтруйте выходные данные (например,|grep на linux) или сохраните его в файле, чтобы вы могли искать в нем.

как вы уже упоминали, по умолчанию -Xmxsize (максимальный размер HeapSize) зависит от конфигурации системы.

Java8 занимает больше 1/6 вашей физической памяти для вашего Xmssize (минимальный HeapSize) и меньше 1/4 вашей физической памяти для вашего -Xmxsize (Максимальной Ограничивает Объем Оперативной Памяти).

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

вы можете проверить ваш HeapSize по умолчанию с

на Windows:

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

на Linux:

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

эти значения по умолчанию также могут быть переопределены на нужную сумму.

удивительно, что этот вопрос не имеет окончательного документированного ответа. Возможно, другая точка данных будет представлять ценность для других, ищущих ответ. На моих системах под управлением CentOS (6.8, 7.3) и Java 8 (build 1.8.0_60-b27, 64-разрядный сервер):

память по умолчанию составляет 1/4 физической памяти, не ограничиваясь 1 ГБ.

и -XX:+PrintFlagsFinal печать в STDERR поэтому команда для определения текущей памяти по умолчанию, представленной другими выше, должна быть настроена на следующее:

java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize

в системе с 64 ГБ физической оперативной памяти возвращается следующее:

uintx MaxHeapSize                                  := 16873684992      {product}

на моей виртуальной машине Ubuntu, с общим объемом ОЗУ 1048 МБ,java -XX:+PrintFlagsFinal -version | grep HeapSize printed:uintx MaxHeapSize := 266338304, что составляет около 266 МБ и составляет 1/4 от моей общей оперативной памяти.

Comments

    Ничего не найдено.