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

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

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

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

4 ответов


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

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

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

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

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

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

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

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


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

  1. Стандартные Варианты,
  2. нестандартные параметры X,
  3. нестандартные параметры XX,

список из нескольких стандартных опций: [чтобы увидеть полный список, выполните команду "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 options, пожалуйста, обратитесь этот блог. Ссылка - это только часть 1 из 8. Узнайте и прочитайте другие части.


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

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

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

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

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

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

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

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

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


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

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