-Xms, -Xmx, -Xns, -XX:MaxPermSize...
のようなJVMのメモリ使用量に影響するJVM引数がたくさんあります
OutOfMemoryError
、StackOverflowError
...)?私は彼らのための良いチートシートを見つけることができません-ここで作成しましょう。
-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
値を増やしてみてください。スタックサイズを大きくすると便利な場合がありますが、コードも確認してください。
数百のJVMオプションが利用可能です。基本的に、これらは3つのタイプに分類されます。
いくつかの標準オプションのリスト:[完全なリストを表示するには、オプションなしでコマンド「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部にすぎません。他の部分も調べて読んでください。
読み取り JVMオプションの説明 。以下はその抜粋です。
Java.lang.OutOfMemoryError: Java heap space
増やすべきエラー-Xmx
値。-XX:PermSize
および-XX:MaxPermSize
調整する必要はありませんが、表示されている場合はJava.lang.OutOfMemoryError: PermGen space
イベントでは、これらの値を増やすことができます。-XX:MaxJavaStackTraceDepth
-StackOverflowError
がスローされる前に、スローされたエラーまたは例外のスタックトレースが保持できるエントリ数を指定します。そのため、巨大なスタックトレースを処理している場合、このオプションを使用して、オーバーフローする前に許可されるエントリを増やすことができます。-Xss:スタックサイズ。
スタックのサイズを設定するために使用されます。スタック値は、作成された関数のスコープ内にのみ存在します。関数が戻ると、それらは破棄されます。
スタック領域を使い果たす最も簡単な方法は、深く再帰することです。
-Xms、-Xmx:最小および最大ヒープサイズ。
ヒープのサイズを設定するために使用されます。ヒープは、オブジェクトを割り当てる場所です。オブジェクトは、ガベージコレクションされるまで存続します。
ヒープ領域を使い果たす最も簡単な方法は、大規模なものを割り当てることです。
-XX:MaxPermSize:永続的な世代。
パーマネント世代は、仮想マシンがJava言語レベルで同等性を持たないオブジェクトを記述するために必要なデータを保持するため、特別です。たとえば、クラスとメソッドを記述するオブジェクトはパーマネントに格納されます世代。
通常、動的にロードするクラスへの参照を何らかの方法でリークしている場合、permgenスペースが不足します。これは、特にいくつかのWebコンテナーを悩ませます。