ホームページ  >  記事  >  ウェブフロントエンド  >  Java 仮想マシン学習 - ガベージ コレクション アルゴリズム

Java 仮想マシン学習 - ガベージ コレクション アルゴリズム

黄舟
黄舟オリジナル
2017-02-17 10:45:271615ブラウズ

トラッキングコレクター

トラッキングコレクターは、オブジェクト間の参照状態をグローバルに記録する集中管理方式を採用しており、実行時に一連のGCルートオブジェクトから開始され、これらのノードから下方向に向かって検索を開始します。オブジェクトに GC ルートへの参照チェーンがない場合、このオブジェクトは利用できないことがわかります。

下の図では、オブジェクト Object6、Object7、および Object8 が相互に参照していますが、それらの GC 根は到達できないため、リサイクル可能なオブジェクトとみなされます。


GC ルートとして使用できるオブジェクトは次のとおりです:

仮想マシンスタック (スタックフレーム内のローカル変数テーブル) ) 内の参照オブジェクト。

メソッド領域のクラスの静的プロパティによって参照されるオブジェクト

メソッド領域の定数によって参照されるオブジェクト

J地元でメソッドスタック NI 参照オブジェクト。実装アルゴリズムには主に、コピー、マークのクリア、マークの圧縮の 3 つがあります。

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

マーククリアアルゴリズムは最も基本的な収集アルゴリズムであり、他の収集アルゴリズムもこの考え方に基づいています。マークとクリアのアルゴリズムは、「マーキング」と「クリア」の 2 つの段階に分かれています。まず、リサイクルする必要があるオブジェクトにマークを付け、マーキングが完了した後にオブジェクトをクリアします。

主な欠点:

① マーキングとクリアのプロセスが効率的ではない

② マークが消えたら、大量のエラーが連続して発生します。

2.


利用可能なメモリ容量を同じサイズの 2 つの部分に分割し、のみ使用します一度に一枚ずつ。このブロックが使い果たされたら、残ったオブジェクトを別のブロックにコピーし、使用済みのメモリ領域を一度にクリーンアップします。このように、毎回 1 つのメモリが再利用され、断片化は発生しません。ヒープのポインタを移動して順番にメモリを割り当てるだけです。実装は簡単で効率的です。

主な欠点:

メモリが元のサイズの半分に減少します。

3. マーキング
- 照合アルゴリズム

マーキング操作と「マークアンドクリア」アルゴリズムは一貫しています。オブジェクトを直接クリーンアップしますが、不要なオブジェクトをクリーンアップした後、残っているすべてのオブジェクトを一方の端に移動し、それらのオブジェクトを参照するポインタを更新します。

主な欠点:


マークアンドクリアに基づいて、オブジェクトを移動する必要があり、比較的コストがかかるという利点があります。メモリの断片化はありません。

参照カウントコレクター

参照カウントコレクターは分散管理方式を採用しており、カウンターを介してオブジェクトが参照されているかどうかを記録します。カウンタが 0 になると、オブジェクトはもう使用されておらず、リサイクルできることを意味します。

主な欠点:

たとえば、以下の図では、ObjectC と ObjectB が相互参照するため、ObjectA が ObjectC と ObjectB への参照を解放したとしても、循環参照シナリオは実現できません。 ObjectB もリサイクルできません。 sunJDK は GC を実装するときにこのメソッドを使用しません。



上記は、Java Virtual Machine Learning - Garbage Collection Algorithm の内容です。その他の関連コンテンツについては、PHP に注目してください。中国語のウェブサイト(www.php.cn)!


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