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

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

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

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

Ответы

Ответ 1

-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. Это может быть полезно, увеличивая размер стека, но вы также должны посмотреть на свой код.

Ответ 2

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

Ответ 3

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

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

Самый простой способ вырваться из пространства стека - это слишком сильно уснуть.

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

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

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

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

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

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

Ответ 4

Прочитайте Опции JVM. Вот отрывки из него:

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