Looking for java Keywords? Try Ask4Keywords

Java Language Установка размеров кучи, пермгана и стека


пример

Когда запускается виртуальная машина Java, она должна знать, как увеличить размер кучи и размер по умолчанию для стеков потоков. Они могут быть указаны с помощью параметров командной строки в команде java . Для версий Java до Java 8 вы также можете указать размер области PermGen кучи.

Обратите внимание, что PermGen был удален в Java 8, и если вы попытаетесь установить размер PermGen, этот параметр будет проигнорирован (с предупреждающим сообщением).

Если вы явно не укажете размеры кучи и стека, JVM будет использовать значения по умолчанию, которые рассчитываются в версии и на платформе. Это может привести к тому, что ваше приложение будет использовать слишком мало или слишком много памяти. Обычно это нормально для стеков потоков, но это может быть проблематично для программы, которая использует много памяти.

Настройка размеров кучи, PermGen и стандартных стеков:

Следующие параметры JVM задают размер кучи:

  • -Xms<size> - устанавливает начальный размер кучи
  • -Xmx<size> - устанавливает максимальный размер кучи
  • -XX:PermSize<size> - устанавливает начальный размер PermGen
  • -XX:MaxPermSize<size> - устанавливает максимальный размер PermGen
  • -Xss<size> - устанавливает размер стека по умолчанию

Параметр <size> может быть числом байтов или может иметь суффикс k , m или g . Последние определяют размер в килобайтах, мегабайтах и ​​гигабайтах соответственно.

Примеры:

$ java -Xms512m -Xmx1024m JavaApp
$ java -XX:PermSize=64m -XX:MaxPermSize=128m JavaApp
$ java -Xss512k JavaApp

Поиск размеров по умолчанию:

Опция -XX:+printFlagsFinal может использоваться для печати значений всех флагов перед запуском JVM. Это можно использовать для печати значений по умолчанию для настроек размера кучи и размера стека следующим образом:

  • Для Linux, Unix, Solaris и Mac OSX

    $ java -XX: + PrintFlagsFinal -version | grep -iE 'HeapSize | PermSize | ThreadStackSize'

  • Для Windows:

    java -XX: + PrintFlagsFinal -version | findstr / i "HeapSize PermSize ThreadStackSize"

Вывод приведенных выше команд будет выглядеть следующим образом:

uintx InitialHeapSize                          := 20655360        {product}
uintx MaxHeapSize                              := 331350016       {product}
uintx PermSize                                  = 21757952        {pd product}
uintx MaxPermSize                               = 85983232        {pd product}
 intx ThreadStackSize                           = 1024            {pd product}

Размеры указаны в байтах.