JVMのガベージコレクションのアルゴリズムは、以下の3つの中で主に使用されます。
- マーク - スイープアルゴリズム
- マーク - 照合アルゴリズム
- レプリケーションのアルゴリズム
のを1つずつ見てみましょう。
まず、マーク - スイープアルゴリズム
その名のとおり、アルゴリズムが分割され、「マーク」と「クリア」二段階で:
- マークフェーズ:マークすべてのオブジェクトが回復する必要があります。(メソッドは、GCのルーツ到達可能性解析アルゴリズムをマーク)
- ステージクリア:すべてのオブジェクトの単なる団結は回復をマークされています。
次のように示す:
アルゴリズムは、2つの大きな欠点があります。
- マーキングおよびクリアランスプロセスの効率が高くありません
- ラージ・オブジェクトのためのメモリを割り当てるメモリを割り当てることができない大きなオブジェクトにつながる、離散メモリ断片化の多数を生成する場合、GCは、事前をトリガします
第二に、マーク - 照合アルゴリズム
マークとしてスイープアルゴリズム- -マークとマークの相の第2段階を終了は、その後、最後に移動されているすべてのライブオブジェクトを移動端末境界の外側に直接メモリを一掃することです。
明らかにマーク-メモリの断片化の問題のスイープアルゴリズム-マークを解決するための仕上げ。
それはまた、多数のオブジェクトを移動する必要があるという欠点を有している。しかし、処理効率が比較的低いです。
第三に、レプリケーションのアルゴリズム
メモリのサイズは2分割され、効率の問題を解決登場し、「コピー」と呼ばれるアルゴリズムを収集するために、この1つはメモリオブジェクトを使い果たし各のみ使用1は、また生き残るためにコピーされます等しいだろうその後、上記の、および他の部分は、クリーンアップのメモリ空間を行うために使用します。
下図のように:
欠点はまた、非常に明白ああです。。。これは、メモリ空間の多くを無駄に、半分しかメモリです。
今、商用の仮想マシンは、リサイクルコレクションアルゴリズムのこの新世代を使用しているが、二つの等しいサイズに分割されていないが、大きなエデンと2つのサバイバー小さなスペース、エデンのスペースと1それぞれの使用サバイバー。リサイクルサバイバーの別の部分にコピーし、エデンとサバイバーも生きているオブジェクト、最終的なクリーンアップエデン、それにサバイバーを使用。
エデンとサバイバーサイズ比ホットスポット仮想マシンのデフォルト8:1で、90%のメモリ使用率を確実にします。すべてのオブジェクトは、生存の10%以上の回収率である場合には、サバイバーは、古い時代の借入に適合しないオブジェクト空間に格納されている古いの空間分布の保証に依存する必要があり、十分ではありません。
第四に、世代コレクションアルゴリズム
今世代のコレクションのアルゴリズムを使用して、市販の仮想マシンは、このアルゴリズムは、そのオブジェクトの生存期間に基づいて、適切なコレクションアルゴリズムを使用していくつかの部分、異なるブロックにメモリを分割し、新しいものではなく、ボクシングの組み合わせです。
一般的には、新世代と古い時代にヒープを分割します。
- 新生代使用:レプリケーションアルゴリズム
- 旧の使用:マーク - スイープやマーク - 照合アルゴリズム