web-dev-qa-db-ja.com

JVMのメモリオプションでは、どの引数が何を表しますか?

-Xms, -Xmx, -Xns, -XX:MaxPermSize...のようなJVMのメモリ使用量に影響するJVM引数がたくさんあります

  • 彼らは何をしますか?
  • もうありますか?
  • どのエラーが発生したら、どれを増やす必要がありますか(例:OutOfMemoryErrorStackOverflowError...)?

私は彼らのための良いチートシートを見つけることができません-ここで作成しましょう。

23

-Xms:このオプションは、初期および最小のJavaヒープサイズを設定します。

-Xmx:このオプションは最大Javaヒープサイズを設定します。Javaヒープ(「ヒープ」)はメモリブロックがオブジェクトに割り当てられ、ガベージコレクション中に解放されるメモリの一部。

-XX:PermSize:-XX:MaxPermSize:は、Permanent Generationのサイズを設定するために使用されます。永続的なスペースは、クラス、メソッド、内部化された文字列、およびVMによって使用される同様のオブジェクト)が格納される場所であり、割り当て解除されることはありません(名前の由来)。

-Xss:は、スレッドスタックサイズを設定します。スレッドスタックは、各Javaスレッドを内部で使用するために割り当てられたメモリ領域です。これは、スレッドがローカル実行状態を格納する場所です。

-Xns:ナーサリサイズを設定します。 JRockit JVMは、世代別ガベージコレクションモデルが使用されている場合、つまり、動的ガベージコレクターが世代別ガベージコレクションモデルを使用する必要があると判断した場合、または静的世代別ガベージコレクター(-Xgc:gencon)選択されました。動的なガベージコレクター(-XgcPrio)を実行するときに、-Xnsを使用して静的なナーサリサイズを設定することもできます。

  • Java.lang.OutOfMemoryError: Java heap spaceを取得している場合は、-Xmxおよび-Xmsの値を変更します。

  • Java.lang.OutOfMemoryError: PermGen spaceを取得している場合は、- XX:MaxPermSize値を増やしてみてください。

  • Java.lang.StackOverflowErrorを取得している場合は、-Xss値を増やしてみてください。スタックサイズを大きくすると便利な場合がありますが、コードも確認してください。

48
Trying

数百のJVMオプションが利用可能です。基本的に、これらは3つのタイプに分類されます。

  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オプションの知識を強化したい場合は、 このブログ を参照してください。リンクは8の1部にすぎません。他の部分も調べて読んでください。

11
Karthik Bose

読み取り JVMオプションの説明 。以下はその抜粋です。

  • 頻繁に受信する場合はJava.lang.OutOfMemoryError: Java heap space増やすべきエラー-Xmx値。
  • 通常は -XX:PermSizeおよび-XX:MaxPermSize調整する必要はありませんが、表示されている場合はJava.lang.OutOfMemoryError: PermGen spaceイベントでは、これらの値を増やすことができます。
  • -XX:MaxJavaStackTraceDepth-StackOverflowErrorがスローされる前に、スローされたエラーまたは例外のスタックトレースが保持できるエントリ数を指定します。そのため、巨大なスタックトレースを処理している場合、このオプションを使用して、オーバーフローする前に許可されるエントリを増やすことができます。
1
naXa

-Xss:スタックサイズ。

スタックのサイズを設定するために使用されます。スタック値は、作成された関数のスコープ内にのみ存在します。関数が戻ると、それらは破棄されます。

スタック領域を使い果たす最も簡単な方法は、深く再帰することです。

-Xms、-Xmx:最小および最大ヒープサイズ。

ヒープのサイズを設定するために使用されます。ヒープは、オブジェクトを割り当てる場所です。オブジェクトは、ガベージコレクションされるまで存続します。

ヒープ領域を使い果たす最も簡単な方法は、大規模なものを割り当てることです。

-XX:MaxPermSize:永続的な世代。

パーマネント世代は、仮想マシンがJava言語レベルで同等性を持たないオブジェクトを記述するために必要なデータを保持するため、特別です。たとえば、クラスとメソッドを記述するオブジェクトはパーマネントに格納されます世代。

通常、動的にロードするクラスへの参照を何らかの方法でリークしている場合、permgenスペースが不足します。これは、特にいくつかのWebコンテナーを悩ませます。

1
Markus Koivisto