世代別GC(せだいべつ じーしー)
最終更新:2026/4/27
世代別GCとは、ガベージコレクションの効率を向上させるために、オブジェクトを世代ごとに分類して回収頻度を変える技術である。
別名・同義語 世代別収集
ポイント
若い世代のオブジェクトは生存期間が短く、回収頻度を高くすることで、GCのオーバーヘッドを削減する。Javaや.NETなどの言語で採用されている。
世代別GCの概要
世代別GCは、ガベージコレクション(GC)のパフォーマンスを改善するための手法の一つです。GCは、プログラムが使用中でなくなったメモリ領域を自動的に解放する機能ですが、全てのオブジェクトを同じ頻度でチェックすると、効率が悪くなる場合があります。そこで、オブジェクトを生存期間に基づいて世代に分け、世代ごとにGCの実行頻度を変えることで、効率的なメモリ管理を実現します。
世代の分類
一般的に、世代別GCでは以下の3つの世代にオブジェクトを分類します。
- 若い世代 (Young Generation): 新しく生成されたオブジェクトが配置される領域です。生存期間が短いオブジェクトが多いため、GCの実行頻度が高くなります。
- 古い世代 (Old Generation): 若い世代からGCを生き残ったオブジェクトが移動する領域です。生存期間が長いオブジェクトが多いため、GCの実行頻度は低くなります。
- 永続世代 (Permanent Generation): クラス定義などのメタデータが配置される領域です。GCの対象とならない場合もあります。
世代別GCの仕組み
プログラムが新しいオブジェクトを生成すると、まず若い世代に配置されます。若い世代はGCの実行頻度が高いため、すぐにGCの対象となり、不要なオブジェクトは解放されます。GCを生き残ったオブジェクトは、古い世代に移動します。古い世代はGCの実行頻度が低いため、オブジェクトが解放されるまでに時間がかかります。
世代別GCのメリット
世代別GCの主なメリットは以下の通りです。
- GCのオーバーヘッドの削減: 若い世代のオブジェクトは生存期間が短いため、GCの実行頻度を高くすることで、GCのオーバーヘッドを削減できます。
- パフォーマンスの向上: GCのオーバーヘッドが削減されることで、プログラムのパフォーマンスが向上します。
- メモリ効率の向上: 不要なオブジェクトを効率的に解放することで、メモリ効率が向上します。
世代別GCのデメリット
世代別GCの主なデメリットは以下の通りです。
- 実装の複雑さ: 世代別GCは、実装が複雑になります。
- 世代間の移動コスト: オブジェクトが世代間で移動する際に、コストがかかる場合があります。