В документации оракула я нашел:
-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) и меньше -Xmxsize8 * (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, выше.