Как ответил 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