Java仮想マシンのガベージコレクションの基本的原則は?
JVMガベージコレクションの基本方針は次のとおりです。
- 参照カウント:オブジェクトごとに、参照されるたびにカウントが増加する参照カウントと呼ばれる数値が紐づけられ、参照が解除されるとカウントは減少します。カウントが0のオブジェクトは、不要なオブジェクト(ガベージ)とみなされ、回収されます。
- 到達可能性分析:一連の「GCルーツ」と呼ばれるオブジェクトを起点に、それらのオブジェクトからあらゆる参照チェーンをたどり、もしオブジェクトが任意の参照チェーン経由でGCルーツに関連付けることができなかった場合、そのオブジェクトは到達不可能と見なされ、回収可能です。
- 空きメモリリスト: ヒープメモリを、使用中の領域と空き領域に分割し、メモリを確保する必要があるとき、空き領域からオブジェクトに割り当てるのに十分な大きさのメモリブロックを見つける。
- 世代別コレクション: ヒープメモリを世代別(通常、若い世代と古い世代)に分割します。若い世代メモリ領域には新しく作成されたオブジェクトが格納され、古い世代メモリ領域には存続時間が長いオブジェクトが格納されます。オブジェクトの存続時間に応じて、異なるガベージコレクションアルゴリズムと戦略が採用されます。
- ガベージコレクションアルゴリズム: マーク アンド スイープ、コピー、マーク アンド コンプアクトなど、一般的なガベージコレクションアルゴリズムがあります。これらのアルゴリズムは、メモリ内のオブジェクトの分布と収集時の戦略に基づいて、異なるガベージコレクションアルゴリズムを選択しています。
- ガベージコレクター:JVMが提供するガベージコレクションの実行方法には、シリアルコレクター、パラレルコレクター、コンカレントコレクターなど、種類があります。ガベージコレクターによって、それぞれ性能特性と利用可能なシナリオが異なります。