トラッキングコレクターは、オブジェクト間の参照状態をグローバルに記録する集中管理方式を採用しており、実行時に一連のGCルートオブジェクトから開始され、これらのノードから下方向に向かって検索を開始します。オブジェクトに GC ルートへの参照チェーンがない場合、このオブジェクトは利用できないことがわかります。
下の図では、オブジェクト Object6、Object7、および Object8 が相互に参照していますが、それらの GC 根は到達できないため、リサイクル可能なオブジェクトとみなされます。
GC ルートとして使用できるオブジェクトは次のとおりです:
仮想マシンスタック (スタックフレーム内のローカル変数テーブル) ) 内の参照オブジェクト。
メソッド領域のクラスの静的プロパティによって参照されるオブジェクト
メソッド領域の定数によって参照されるオブジェクト
J地元でメソッドスタック NI 参照オブジェクト。実装アルゴリズムには主に、コピー、マークのクリア、マークの圧縮の 3 つがあります。
1. マーククリアアルゴリズム
マーククリアアルゴリズムは最も基本的な収集アルゴリズムであり、他の収集アルゴリズムもこの考え方に基づいています。マークとクリアのアルゴリズムは、「マーキング」と「クリア」の 2 つの段階に分かれています。まず、リサイクルする必要があるオブジェクトにマークを付け、マーキングが完了した後にオブジェクトをクリアします。
主な欠点:
① マーキングとクリアのプロセスが効率的ではない
。 ② マークが消えたら、大量のエラーが連続して発生します。
2.
主な欠点:
メモリが元のサイズの半分に減少します。
3. マーキング
- 照合アルゴリズム
マーキング操作と「マークアンドクリア」アルゴリズムは一貫しています。オブジェクトを直接クリーンアップしますが、不要なオブジェクトをクリーンアップした後、残っているすべてのオブジェクトを一方の端に移動し、それらのオブジェクトを参照するポインタを更新します。
主な欠点:
マークアンドクリアに基づいて、オブジェクトを移動する必要があり、比較的コストがかかるという利点があります。メモリの断片化はありません。
参照カウントコレクターは分散管理方式を採用しており、カウンターを介してオブジェクトが参照されているかどうかを記録します。カウンタが 0 になると、オブジェクトはもう使用されておらず、リサイクルできることを意味します。主な欠点:
たとえば、以下の図では、ObjectC と ObjectB が相互参照するため、ObjectA が ObjectC と ObjectB への参照を解放したとしても、循環参照シナリオは実現できません。 ObjectB もリサイクルできません。 sunJDK は GC を実装するときにこのメソッドを使用しません。
上記は、Java Virtual Machine Learning - Garbage Collection Algorithm の内容です。その他の関連コンテンツについては、PHP に注目してください。中国語のウェブサイト(www.php.cn)!