Есть ли настройка -Xmx по умолчанию для java 1.5?
Из интереса - существует ли по умолчанию или отличается ли она от каждой ОС?
Если это так, каковы значения по умолчанию? Невероятно сложно найти!
Ответы
Ответ 1
Подробности можно найти в Java 5.0 Ergonomics documentation. В частности:
- Для машины "серверного класса" (2+ процессора, 2 ГБ ОЗУ) максимальный размер кучи по умолчанию составляет ¼ физической памяти, до 1 Гбайт
- Для "обычной" машины это 64 МБ.
Ответ 2
Как Matt Solnit, специфика для java 1.5 была 1 ГБ или ¼ физической памяти, в зависимости от того, что меньше, для машины класса сервера и 64 МБ для других машин ( от Java 5.0 Эргономическая документация).
К сожалению, JVM меняются со временем, и наиболее подходящая документация становится более сложной для идентификации, поэтому, чтобы узнать размер кучи по умолчанию (и размер кучи PermGen) для вашей конкретной JVM, лучший способ узнать это - заставить вашу JVM рассказать вы.
Где-то между "1.6.0_06" и "1.6.0_21" была добавлена опция -XX:+PrintFlagsFinal
, и, похоже, она впервые появилась в народах внимание вокруг "1.6.0_23". Он предоставляет массу информации о настройке JVM, но мы сосредоточимся на размерах и ограничениях кучи и пермг.
Linux
В Linux вы можете использовать команду:
java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
Окна
Аналогично в окнах вы можете использовать команду:
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
Примечания
- В зависимости от вашей системы
java
может по умолчанию использоваться как -client
или -server
, поэтому, если вы заставляете приложение запускаться с любым из них, вы также можете сделать то же самое при запуске этих команд.
Примеры
В моей системе Linux я получаю:
$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx InitialHeapSize := 66328448 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1063256064 {product}
uintx MaxPermSize = 67108864 {pd product}
uintx PermSize = 16777216 {pd product}
java version "1.6.0_24"
и по умолчанию он равен -server
, поэтому с -client
я получаю:
$ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx InitialHeapSize := 16777216 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 268435456 {product}
uintx MaxPermSize = 67108864 {pd product}
uintx PermSize = 12582912 {pd product}
java version "1.6.0_24"
В моей системе Windows я получаю:
C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx InitialHeapSize := 16777216 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 268435456 {product}
uintx MaxPermSize = 67108864 {pd product}
uintx PermSize = 12582912 {pd product}
java version "1.6.0_21"
которые являются настройками -client
и, как представляется, нет опции -server
:
C:\>java -server -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
C:\>java -server -XX:+PrintFlagsFinal -version
Error: no `server' JVM at `C:\jdk\jre\bin\server\jvm.dll'.
Подводя итог:
Parameter \ JVM 1.6.0_24
Lin/svr Lin/cli Windows
InitialHeapSize 63MB 16MB 16MB
LargePageHeapSizeThreshold 128MB 128MB 128MB
MaxHeapSize 1014MB 256MB 256MB
MaxPermSize 64MB 64MB 64MB
PermSize 16MB 12MB 12MB
Ответ 3
Согласно документации Java по умолчанию для Sun/Oracle Windows и Solaris/Linux JVM - 64 МБ. Однако это может быть разным для разных поставщиков JVM. Например, значение -Xmx по умолчанию для JRockit составляет менее 75% от общего объема памяти или 1 ГБ.
Если вам интересно, какой максимальный объем памяти вы можете использовать на своей JVM, во время выполнения вы можете позвонить:
System.out.println(Runtime.getRuntime().maxMemory());