Есть ли по умолчанию параметр -Xmx для Java 1.5? - PullRequest
15 голосов
/ 07 августа 2010

Из интереса. Существует ли значение по умолчанию или оно отличается в каждой ОС?

Если это так, каковы значения по умолчанию?Невероятно трудно найти!

Ответы [ 3 ]

21 голосов
/ 03 ноября 2011

Как ответил 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, но мы сосредоточимся на размерах и ограничениях кучи и permgen.

Linux

В Linux вы можете использовать команду:

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'

Windows

Аналогично в Windows вы можете использовать команду:

java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"

Примечания

  • В зависимости от вашей системы, java может по умолчанию принимать значение -client или -server, поэтому, если вы заставляете свое приложение запускаться с любым из них, вы также можете сделать то же самое при запуске этих команд.

Примеры * +1036 * В моей системе 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

17 голосов
/ 07 августа 2010

Подробную информацию можно найти в документации по эргономике Java 5.0 . В частности:

  • Для машины "серверного класса" (2+ процессора, 2+ ГБ ОЗУ) максимальный размер кучи по умолчанию составляет physical физической памяти, до 1 Гбайт
  • Для "обычной" машины это 64 МБ.
9 голосов
/ 07 августа 2010

Согласно документации Java, по умолчанию для виртуальных машин Sun / Oracle Windows и Solaris / Linux установлено 64 МБ. Это может отличаться для разных поставщиков JVM. Например, значение -Xmx по умолчанию для JRockit меньше 75% от общего объема памяти или 1 ГБ.

Если вам интересно, какой максимальный объем памяти вы можете использовать на своей JVM, во время выполнения вы можете позвонить:

System.out.println(Runtime.getRuntime().maxMemory());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...