В документации оракула я нашел:
-Xmxsize Задает максимальный размер (в байтах) пула распределения памяти в байтах ... Значение по умолчанию выбирается во время выполнения на основе конфигурации системы.
Что означает конфигурация системы ?
В документации оракула я нашел:
-Xmxsize Задает максимальный размер (в байтах) пула распределения памяти в байтах ... Значение по умолчанию выбирается во время выполнения на основе конфигурации системы.
Что означает конфигурация системы ?
-Xmx
, по крайней мере, в Java 8, потому что в моей 64-битной системе Linux с общим объемом памяти 6 Гб у меня jvm по умолчанию имеет -Xmx = 1,5 Гб.
Ответы:
Это зависит от реализации и версии, но , как правило , это зависит от ВМ используется (например , клиент или сервер см -client
и -server
параметры) и системная память.
Часто значение по client
умолчанию составляет 1/4 вашей физической памяти или 1 ГБ (в зависимости от того, что меньше).
Также параметры конфигурации Java (параметры командной строки) могут быть «переданы на аутсорсинг» переменным среды, включая переменные -Xmx
, которые могут изменить значение по умолчанию (то есть указать новое значение по умолчанию). В частности, JAVA_TOOL_OPTIONS
переменная среды проверяется всеми инструментами Java и используется, если существует (подробнее здесь и здесь ).
Вы можете запустить следующую команду, чтобы увидеть значения по умолчанию:
java -XX:+PrintFlagsFinal -version
Это дает вам длинный список, -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, выше.