Какие аргументы обозначают что в параметрах памяти JVM?

Существует множество аргументов JVM, которые влияют на использование памяти JVM, например -Xms, -Xmx, -Xns, -XX:MaxPermSize...

  • Что они делают?
  • Есть ли еще?
  • Какой из них мне нужно увеличить, когда я получаю какую ошибку (например, OutOfMemoryError, StackOverflowError...)?

Я не могу найти для них хорошую шпаргалку — давайте создадим ее здесь.


person Francois Bourgeois    schedule 08.11.2013    source источник
comment
Вы можете начать поиск на oracle.com/technetwork/java /javase/tech/ и документы. oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/. Затем проведите небольшое исследование, чтобы получить такие результаты, как avricot.com/blog/?post/2010/05/03/   -  person Luiggi Mendoza    schedule 08.11.2013
comment
Еще несколько полезных ссылок на stackoverflow.com/questions/10486375/print-all-jvm-flags   -  person Sachin Bhansali    schedule 09.10.2016


Ответы (4)


-Xms: этот параметр устанавливает начальный и минимальный размер кучи Java.

-Xmx: Этот параметр устанавливает максимальный размер кучи Java. Куча Java («куча») — это часть памяти, в которой блоки памяти выделяются для объектов и освобождаются во время сборки мусора.

-XX:PermSize: -XX:MaxPermSize: используются для установки размера для постоянной генерации. Постоянное пространство — это место, где хранятся классы, методы, внутренние строки и подобные объекты, используемые виртуальной машиной и никогда не освобождаемые (отсюда и название).

-Xss: задает размер стека потока. Стеки потоков — это области памяти, выделенные для каждого потока Java для их внутреннего использования. Здесь поток хранит свое локальное состояние выполнения.

-Xns: задает размер питомника. JVM JRockit использует питомник, когда используется модель сборки мусора поколений, то есть когда динамический сборщик мусора определил, что следует использовать модель сборки мусора поколений, или когда статический параллельный сборщик мусора поколений ( -Xgc : gencon) был выбрано. Вы также можете использовать -Xns для установки статического размера питомника при запуске динамического сборщика мусора (-XgcPrio).

  • Если вы получаете java.lang.OutOfMemoryError: Java heap space, измените значение -Xmx и -Xms.

  • если вы получаете java.lang.OutOfMemoryError: PermGen space, попробуйте увеличить значение - XX:MaxPermSize.

  • если вы получаете java.lang.StackOverflowError, попробуйте увеличить значение -Xss. Это может быть полезно, увеличив размер стека, но вы также должны взглянуть на свой код.

person Trying    schedule 08.11.2013
comment
Пространство Permgen может быть освобождено, если у вас больше нет ссылки на классы, которые были загружены ранее. Включение PermgenSweep — это опция виртуальной машины. В качестве уточнения, питомник используется для хранения недолговечных объектов. - person Markus Koivisto; 08.11.2013

Доступны сотни вариантов JVM. В основном их делят на три типа:

  1. Стандартные варианты,
  2. Нестандартные варианты X,
  3. Нестандартные варианты ХХ,

Список нескольких стандартных параметров: [Чтобы увидеть полный список, выполните команду "java" без каких-либо параметров]

 -client       to select the "client" VM
 -server       to select the "server" VM
 -cp <class search path of directories and zip/jar files>
 -classpath <class search path of directories and zip/jar files>
               A ; separated list of directories, JAR archives,
               and ZIP archives to search for class files.
 -D<name>=<value>
               set a system property
 -version      print product version and exit
 -showversion  print product version and continue
 -X            print help on non-standard options`

Список нескольких нестандартных опций X: [Чтобы увидеть полный список, выполните команду «java -X»]

-Xincgc           enable incremental garbage collection
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only

Список нескольких нестандартных параметров XX: [Доступен полный список здесь]

-XX:InitialHeapSize=<size>        set initial Java heap size. Same as -Xms<size>.
-XX:MaxHeapSize=<size>            set maximum Java heap size. Same as -Xmx<size>.
-XX:+PrintFlagsFinal              prints all JVM options passed.
-XX:+UnlockDiagnosticVMOptions    opens up lot more VM options.

Если вы хотите расширить свои знания о параметрах JVM, см. этот блог. По ссылке только часть 1 из 8. Узнайте и прочтите и другие части.

person Karthik Bose    schedule 13.11.2014

-Xss: Размер стека.

Используется для установки размера вашего стека. Значения стека существуют только в рамках функции, в которой они созданы. Как только функция возвращается, они отбрасываются.

Самый простой способ исчерпать пространство стека — слишком глубоко рекурсировать.

-Xms, -Xmx: минимальный и максимальный размер кучи.

Используется для установки размера вашей кучи. Куча — это место, где вы размещаете объекты. Объекты сохраняются до тех пор, пока они не будут удалены сборщиком мусора.

Самый простой способ исчерпать пространство кучи — выделить что-то массивное.

-XX:MaxPermSize: Постоянное поколение.

Постоянная генерация особенная, потому что она содержит данные, необходимые виртуальной машине для описания объектов, которые не имеют эквивалента на уровне языка Java. Например, объекты, описывающие классы и методы, хранятся в постоянном поколении.

Обычно у вас заканчивается пространство permgen, если вы каким-то образом пропускаете ссылки на классы, которые вы загружаете динамически. В частности, это мешает некоторым веб-контейнерам.

person Markus Koivisto    schedule 08.11.2013
comment
Xms предназначен для минимального размера кучи, а не размера стека. - person Trying; 08.11.2013

Прочтите объяснение параметров JVM. Вот выдержки из него:

  • Если вы часто получаете ошибки java.lang.OutOfMemoryError: Java heap space, вам следует увеличить значение -Xmx.
  • Обычно -XX:PermSize и -XX:MaxPermSize не нужно настраивать, но если вы часто видите события java.lang.OutOfMemoryError: PermGen space, вы можете увеличить эти значения.
  • -XX:MaxJavaStackTraceDepth — указывает, сколько записей может иметь трассировка стека для сгенерированной ошибки или исключения, прежде чем будет сгенерировано StackOverflowError. Поэтому, если вы имеете дело с огромными трассировками стека, вы можете использовать эту опцию, чтобы увеличить разрешенные записи до переполнения.
person naXa    schedule 27.10.2016