2013-11-08 5 views
16

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

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

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

+6

Вы можете ознакомиться с http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html и http://docs.oracle.ком/кд/E13150_01/jrockit_jvm/JRockit/jrdocs/RefMan/optionX.html. Затем выполните некоторые исследования, чтобы получить результаты, такие как http://www.avricot.com/blog/?post/2010/05/03/Get-started-with-java-JVM-memory-(heap%2C-stack%2C -xss-xms-xmx-xmn ...) –

+0

Еще несколько полезных ссылок на http://stackoverflow.com/questions/10486375/print-all-jvm-flags –

ответ

41

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

+0

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

1

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

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

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

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

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

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

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

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

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

+2

Xms предназначен для минимального размера кучи, а не размера стека. – Trying

+1

Благодарим за исправление. –

9

Есть сотни вариантов 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: [К se е полный список выполнить команду «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: [Полный список доступен here]

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

1

Прочитано JVM options explained. Here're выдержки из него:

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