В документации оракула я нашел:
-Xmxsize Задает максимальный размер (в байтах) пула распределения памяти в байтах ... Значение по умолчанию выбирается во время выполнения на основе конфигурации системы.
Что означает конфигурация системы ?
В документации оракула я нашел:
-Xmxsize Задает максимальный размер (в байтах) пула распределения памяти в байтах ... Значение по умолчанию выбирается во время выполнения на основе конфигурации системы.
Что означает конфигурация системы ?
-Xmx
, по крайней мере, в Java 8, потому что в моей 64-битной системе Linux с общим объемом памяти 6 Гб у меня jvm по умолчанию имеет -Xmx = 1,5 Гб.Ответы:
Это зависит от реализации и версии, но , как правило , это зависит от ВМ используется (например , клиент или сервер см
-client
и-server
параметры) и системная память.Часто значение по
client
умолчанию составляет 1/4 вашей физической памяти или 1 ГБ (в зависимости от того, что меньше).Также параметры конфигурации Java (параметры командной строки) могут быть «переданы на аутсорсинг» переменным среды, включая переменные
-Xmx
, которые могут изменить значение по умолчанию (то есть указать новое значение по умолчанию). В частности,JAVA_TOOL_OPTIONS
переменная среды проверяется всеми инструментами Java и используется, если существует (подробнее здесь и здесь ).Вы можете запустить следующую команду, чтобы увидеть значения по умолчанию:
Это дает вам длинный список,
-Xmx
естьMaxHeapSize
,-Xms
естьInitialHeapSize
. Отфильтруйте свой вывод (например,|grep
в linux) или сохраните его в файл, чтобы вы могли искать в нем.источник
java -XX:+PrintCommandLineFlags
распечатку размеров кучи (и другой информации), выбранных JVM на основе текущей системной информации-XX:+PrintFlagsFinal
, который вы предложили, мне не подходит. Добавляем к ответу.-XX:+PrintFlagsFinal
- лучший вариант, поскольку он должен отображать всю информацию после того, как все было учтено (включая ручные настройки и эргономику). Хотя,-XX:+PrintCommandLineFlags
похоже, работает на моей JVM (может зависеть от точной версии)java -XX:+PrintFlagsFinal -version | grep HeapSize
Как вы уже упоминали, значение по умолчанию
-Xmxsize
(Максимальный размер кучи) зависит от конфигурации вашей системы.Java8
client
занимает больше 1/64 вашей физической памяти для вашегоXmssize
(Minimum HeapSize) и меньше 1/4 вашей физической памяти для вашего-Xmxsize
(Maximum HeapSize).Это означает, что если у вас есть физическая память размером 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 (сборка 1.8.0_60-b27, 64-разрядный сервер):
память по умолчанию составляет 1/4 физической памяти, а не ограничивается 1 ГБ.
Кроме того,
-XX:+PrintFlagsFinal
выводится в STDERR, поэтому команда для определения текущей памяти по умолчанию, представленная другими выше, должна быть изменена на следующее:java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize
В системе с 64 ГБ физической RAM возвращается следующее:
uintx MaxHeapSize := 16873684992 {product}
источник
На моей виртуальной машине Ubuntu с общим объемом оперативной памяти 1048 МБ
java -XX:+PrintFlagsFinal -version | grep HeapSize
напечатано:,uintx MaxHeapSize := 266338304
что составляет примерно 266 МБ и составляет 1/4 моего общего объема оперативной памяти.источник
По состоянию на 8 мая 2019 г .:
Размер кучи JVM зависит от конфигурации системы, то есть:
а) клиент jvm против сервера jvm
б) 32 бит против 64 бит .
Ссылки:
1) обновление с J2SE5.0: https://docs.oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2) краткий ответ: https://docs.oracle.com/ javase / 8 / docs / technotes / guides / vm / gctuning / ergonomics.html
3) подробный ответ: https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html# default_heap_size
4) клиент против сервера: https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
Резюме: (Это сложно понять из приведенных выше ссылок. Итак, резюмируя их здесь)
1) Максимальный размер кучи по умолчанию для Client jvm составляет 256 МБ (есть исключение, см. Ссылки выше).
2) Максимальный размер кучи по умолчанию для 32-битного сервера jvm составляет 1 ГБ, а для 64-разрядного - 32 ГБ (опять же, здесь тоже есть исключения. Пожалуйста, прочтите это по ссылкам).
Так по умолчанию размер максимальной JVM кучи: 256mb или 1gb или 32gb в зависимости от VM, выше.
источник