JVM学習ノート:JVMメモリ管理とJVMガベージコレクションの概念。 JVMメモリ構造は、ヒープ、スタック、ローカルメソッドスタック、メソッドエリア、その他の部品で構成されています。さらに、JVMは、それぞれ新世代と古い世代のダウンロードアドレスにさまざまなごみ収集メカニズムを使用しています。
まず、ヒープ、スタック、ローカルメソッドスタック、メソッドエリア、その他の部品で構成されるJVMメモリ構造を見てみましょう。構造図を以下に示します。
JVM学習ノートJVMメモリ管理とJVMガベージコレクション
JVMメモリ構造
JVMメモリ構造は、ヒープ、スタック、ローカルメソッドスタック、メソッドエリア、その他の部品で構成されています。構造図は次のとおりです。
1)ヒープ
Newによって作成されたすべてのオブジェクトのメモリはヒープに割り当てられ、そのサイズは-XMXと-XMSで制御できます。ヒープはセポンミンと古い世代に分かれており、セポニムはさらにエデンとサバイバーゾーンに分かれています。最後に、サバイバーはfromspace and Tospaceで構成されています。構造図は次のとおりです。
新世代。新しいオブジェクトは、新世代によってメモリを割り当てられます。エデンが不十分な場合、生存する物体は生存者に転送されます。新世代のサイズは、-xmnまたは-xx:survivivorratioを使用してエデンと生存者の比を制御できます。新世代で複数のゴミコレクションを生き延びたオブジェクトを保存するために使用されます。
2)スタック
各スレッドが各メソッドを実行すると、スタック内のスタックフレームに適用されます。各スタックフレームには、ローカル変数領域とオペランドスタックが含まれており、このメソッドコール中に一時変数、パラメーター、および中間結果を保存するために使用されます。
3)ローカルメソッドスタック
ネイティブメソッドの実行をサポートし、各ネイティブメソッドコールのステータスを保存するために使用されます
4)メソッド領域
ロードするクラス情報、静的変数、および最終型定数、属性、メソッド情報を保存します。 JVMはPermantGenerationを使用してメソッドエリアを保存し、最小値と最大値を-XX:Permsizeおよび-XX:MaxPermsizeで指定できます。 JVMメモリ構造を導入した後、JVMガベージコレクションメカニズムのダウンロードアドレスを見てみましょう。
JVMガベージコレクションメカニズム
JVMは、それぞれ新世代と古い世代にさまざまなごみ収集メカニズムを採用しています
GCの新世代:
セポニマスは通常、生存時間が短いため、コピーアルゴリズムに基づいてリサイクルされます。いわゆるコピーアルゴリズムは、存続するオブジェクトをスキャンして、それらをエデンとSpaceまたはTospaceの間でコピーするセポニマスに対応する新しい完全に使用されていないスペースにコピーすることです。新世代は、アイドルポインターを使用してGCトリガーを制御します。ポインターは、新しい世代間隔に最後に割り当てられたオブジェクトを保持します。メモリを割り当てる新しいオブジェクトがある場合、スペースで十分かどうかを確認するために使用されます。十分でない場合は、GCをトリガーします。オブジェクトが継続的に割り当てられると、オブジェクトは徐々にエデンからサバイバーに、そして最後に古い世代に移動します。
javavisualvmを使用してそれを明確に表示し、新世代がいっぱいになった後、オブジェクトが古い世代に転送され、その後クリアしてロードを継続することを観察します。以下の図に示すように、古い世代がいっぱいになると、OutOfMemoryの例外が報告されます。
実行メカニズムに関して、JVMはシリアルGC(SerialGC)、並列リサイクルGC(ParallelsCavenge)、および並列GC(Parnew)を提供します
1)シリアルGC
スキャンおよびコピープロセス全体は、単一のスレッド方法で実行されます。これは、単一のCPU、新世代の小さなスペースを持つアプリケーションに適しており、一時停止時間の要件はそれほど高くありません。これは、クライアントレベルでのデフォルトのGCメソッドです。 -xx:+useSerialgcを介して指定することを余儀なくされることができます
2)GCの並列リサイクル
スキャンおよび複製プロセス全体は、マルチスレッドの方法で実行されます。マルチCPUおよび短い一時停止時間要件を持つアプリケーションに適しています。これは、デフォルトでサーバーレベルで使用されるGCメソッドです。 -xx:+useparallelgcの仕様を強制するために使用でき、-xx:parallelgcthreads = 4を使用して、スレッドの数を指定します。
3)並列GC
古い世代の同時GCで使用します
古い世代GC:
新世代とは異なり、オブジェクトは長い間生き残り、比較的安定しています。したがって、マークアルゴリズムはリサイクルに使用されます。いわゆるマークは、生き残ったオブジェクトをスキャンしてから、マークのないオブジェクトをリサイクルすることを意味します。リサイクル後、空のスペースはマージされるか、次回の割り当てのためにマークアウトされます。要するに、メモリの断片化によって引き起こされる効率の損失を減らす必要があります。実行メカニズムの観点から、JVMはシリアルGC(SerialMSC)、並列GC(ParallelMSC)、および同時GC(CMS)を提供します。特定のアルゴリズムの詳細をさらに調査する必要があります。
上記のGCメカニズムは組み合わせて使用する必要があり、指定された方法を次の表に示します。
上記は、編集者がもたらすJava GCの作業原則の詳細な理解のすべての内容です。誰もがwulin.comをもっとサポートすることを願っています〜