Наиболее заметным непосредственным отличием в старых версиях 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"
, поэтому при -server
большинство пределов памяти и начальные выделения намного выше для этой java
версии.
Однако эти значения могут изменяться для разных комбинаций архитектуры, операционных систем и версий jvm. Последние версии jvm убрали флаги и перенесли многие различия между сервером и клиентом.
Помните также, что вы можете увидеть все детали бега jvm
, используя jvisualvm
. Это полезно, если у вас есть пользователи, которые или модули, которые задают JAVA_OPTS
, или используют сценарии, которые изменяют параметры командной строки. Это также позволит вам в реальном времени отслеживать использование пространства heap и permgen вместе со множеством других характеристик.