Есть ли настройка -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());