ホームページ  >  記事  >  Java  >  JVM ガベージ コレクション アルゴリズムとは何ですか?

JVM ガベージ コレクション アルゴリズムとは何ですか?

青灯夜游
青灯夜游オリジナル
2021-04-22 14:58:4032879ブラウズ

JVM ガベージ コレクション アルゴリズム: 1. 「Mark-Clear」アルゴリズム; まず、リサイクルする必要があるすべてのオブジェクトをマークし、マークが完了した後、マークされたすべてのオブジェクトを均一にリサイクルします。 2. アルゴリズムをコピーします。メモリを 2 つの同じサイズのブロックに分割し、一度にそのうちの 1 つだけを使用します。 3. 「Mark-Organization」アルゴリズム; 4. 世代別収集アルゴリズム。

JVM ガベージ コレクション アルゴリズムとは何ですか?

#このチュートリアルの動作環境: Windows7 システム、Java8 バージョン、DELL G3 コンピューター。

JVM ガベージ コレクション アルゴリズム


2 つの概念:

新世代:ライフサイクルの短いオブジェクトが保管される領域。 旧世代: ライフサイクルの長いオブジェクトが保存される領域。

#同じ点: それらはすべて Java ヒープ上にあります

1. マーククリア アルゴリズム

実行手順:

マーキング: メモリ領域を走査し、リサイクルする必要があるオブジェクトをマークします。
  • クリア: メモリを再度たどり、マークされたメモリをリサイクルします。
  • #イラスト:

JVM ガベージ コレクション アルゴリズムとは何ですか?

##欠点:

JVM ガベージ コレクション アルゴリズムとは何ですか?

#効率の問題; メモリ空間が 2 回横断されます (1 回目はマークされ、2 回目はクリアされます)。

スペースの問題: 大量のメモリ フラグメントが生成されやすく、より大きなメモリが必要な場合、要件を満たすピースが見つからないため、GC を再度開始する必要があります。

  • #2. コピー アルゴリズム

メモリを 2 つの同じサイズのブロックに分割し、そのうちの 1 つだけを使用します。毎回の作品。ブロックが使い果たされてGCが発生すると、ブロック内に残ったオブジェクトが別の領域にコピーされ、不要なメモリが一気にクリアされます。次回 GC がトリガーされると、そのブロックの残っている部分がこのブロックにコピーされ、その後そのブロックが消去され、このサイクルが繰り返されます。 #図:

##利点

JVM ガベージ コレクション アルゴリズムとは何ですか?#マーククリーン アルゴリズムと比較して、メモリの断片化の問題を解決します。

より効率的です (メモリをクリーンアップするときに、最初と最後のアドレスを覚えて、一度に消去します)。 JVM ガベージ コレクション アルゴリズムとは何ですか?

欠点:

  • メモリ使用率は高くなく、一度に使用できるメモリの半分だけです。
改善点

# 研究によると、新世代のほとんどのオブジェクトは「生きて死ぬ」、つまりライフ サイクルが非常に短く、オブジェクトの寿命が長くなるほど、リサイクルが難しくなります。 GC が発生すると、再利用する必要があるオブジェクトが多く、生き残るオブジェクトはほとんどないため、別のメモリに移動する必要があるオブジェクトはほとんどないため、メモリ空間を 1:1 に分割する必要はありません。代わりに、新世代全体が 8:1:1 の比率で 3 つのエリアに分割され、最大のエリアはエデン エリアと呼ばれ、2 つの小さなエリアはそれぞれ To Survivor および From Survivor と呼ばれます。

最初の GC では、Eden の生き残ったオブジェクトのみを To にコピーする必要があります。その後、エデン地域全体がリサイクルされます。再度GCが発生した場合は、残っているEdenとToをFromにコピーし、この作業を繰り返します。このようにして、各新しい世代で使用可能なメモリは新しい世代全体の 90% を占め、メモリ使用率が大幅に向上します。 [関連する推奨事項:
    Java ビデオ チュートリアル
  • ]
ただし、毎回生き残るオブジェクトが常に新しい世代全体の 10% 未満であるという保証はありません。過去を保存することはできないため、ここでは、旧世代と呼ばれる別のメモリ ブロックを使用して、割り当て保証を実行し、オブジェクトを旧世代に保存します。十分でない場合は、OOM がスローされます。

古い世代: 複数回のリサイクル試行 (デフォルトは 15 回) に耐えたオブジェクトを新しい世代に保管します。

3. マーク – 照合アルゴリズム

以前のコピー アルゴリズムは、オブジェクトの生存率が比較的高い場合にコピーを続けるためです。 . やって来て過去をコピーすることは無意味であり、時間の無駄です。そこで、高齢者向けに「マーキングソート」アルゴリズムが提案された。

実行ステップ: マーキング: リサイクルする必要があるものにマークを付ける

組織: 残っているオブジェクトを移動させますメモリへ ファイルの一端を移動し、未使用のメモリを直接クリーンアップします。

#図:

  • ##4. 世代別収集アルゴリズム

現在、ほとんどの商用仮想マシンはこの世代別コレクション アルゴリズムを使用しています。このアルゴリズムには新しい内容はありません。オブジェクトの生存時間に基づいてメモリを新しい世代と古い世代に分割するだけです。このようにして、対応するアルゴリズムさまざまな分野に採用できます。例:

  • 新世代では毎回大量のオブジェクトが消滅しますが、旧世代ではメモリ保証として使用され、コピーアルゴリズムが採用されています。
  • 旧世代では、オブジェクトの生存期間が長く、マーク ソート アルゴリズムまたはマーク クリーニング アルゴリズムを使用できます。

MinorGC と FullGC の違い

MinorGC: 新しい世代で発生するガベージ コレクション。新しい世代では、MinorGC が非常に頻繁で、リサイクル速度が比較的速く、毎回のリサイクル量も多くなります。
FullGC: 古い世代で発生するガベージ コレクション (MajorGC とも呼ばれます) は比較的遅く、MinorGc よりも約 10 倍遅くなります。 FullGC には通常、複数の MinorGC が伴います。

プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !

以上がJVM ガベージ コレクション アルゴリズムとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。