Какие аргументы означают, что в параметрах памяти 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 доступны. В основном они подразделяются на три вида:
- Стандартные Варианты,
- нестандартные параметры X,
- нестандартные параметры 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 перед переполнением.