1. マークアンドクリアアルゴリズム
マークアンドクリアアルゴリズムは、その名のとおり、マークとクリアの 2 つの段階に分かれています。 、リサイクルする必要があるオブジェクトにマークを付けます。 マーク 完了後、
下の図に示すように、マークされたオブジェクトは均一にリサイクルされます。 具体的なマーキング処理の紹介は、ガベージコレクションのオブジェクト生存アルゴリズムについて前回紹介した「到達可能性解析」を参照してください
リサイクル後の状態
デメリット:
1.マーキングとクリアの2つのアクションの効率はあまり高くありません
2.写真からもわかるように、クリア後の記憶の断片が大量に残ることになります。これは、大きなオブジェクトにメモリ領域を割り当てるときに、十分な大きさの連続した領域を見つけることができず、事前に GC が発生する可能性があることです。 2. コピーアルゴリズム コピーアルゴリズムの原理は、メモリ空間を同じサイズの 2 つの部分に分割することです。ガベージコレクションが必要な場合、使用済みメモリ 内に残っているオブジェクトは、メモリ上の別の部分にコピーしてから、前のメモリ部分をクリアします。下の写真の通りリサイクル前の状態
リサイクル後の状態
長所: レプリケーションアルゴリズムの方が効率的です
短所: このアルゴリズム犠牲 スペースが大きくなり、結局使えるメモリスペースが元の半分になってしまった
3. マークソートアルゴリズムこれは古い世代でよく使われているアルゴリズムです。世代オブジェクトは長期間保存されます。
マーキングとソートアルゴリズムのマーキングプロセスはマーククリーニングアルゴリズムと同じですが、その後のステップが異なりますマーキングとソートアルゴリズムは生き残ったオブジェクトを一方の端に移動します、
そして。以下のように、生存終了境界のもう一方の端にあるすべてのメモリをクリーンアップします。 写真
リサイクル前の状態
リサイクル後の状態
4. 世代別収集アルゴリズム
現在の仮想マシンは世代別収集アルゴリズムを使用しており、このアルゴリズムはオブジェクトの異なる生存期間に従ってメモリを異なる領域に分割します。一般に、Java ヒープは新しい世代に分割されます。商用仮想マシンでは、新しい世代のガベージ コレクションにコピー アルゴリズムが使用されます。その理由は、新しい世代のオブジェクトの 98% の生存時間が非常に短いためです。メモリを同じサイズの 2 つの部分に分割する必要はありません。ブロックは、コピーされる存続するオブジェクト用に小さなスペースを残すだけで済みます。したがって、
メモリは通常、より大きな Eden 領域と 2 つの小さな Survivor 領域に分割されます。リサイクルする場合は、Eden 領域と Survivor 領域にある存続オブジェクトを別のSurvivor 領域にコピーしてから、渡されたサーバーをクリーンアップします。
以上がJVM の高度な機能 - ガベージ コレクション アルゴリズムのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。