世代別ガベージコレクション

世代別ガベージコレクション () はガベージコレクションの手法のひとつである。別名として、ジェネレーション・スキャベンジング () とも呼ばれる。以下、ガベージコレクションをGCと省略する。
概要.
ガベージコレクションを持つ言語上で動く実システムでは、経験上メモリオブジェクトの利用に、ある偏りが存在する。それは「計算途上で利用される一時オブジェクトは数が多く、かつすぐさま破棄される率が高い」「ある程度長く生存したオブジェクトは、以降も長く生存する率が高い」という傾向である。
この傾向に着目し、メモリ領域を2つの世代に分離する。
というルールを与える。そして第3のルールとして
を考えるのが世代別GCである。
世代別GCは汎用のガベージコレクションとしてバランスに優れており、また世代間移動のしきい値や第1世代領域のサイズなど、チューニングがしやすいこと、仮想記憶との相性が良いことなど、利点が多い。特にオブジェクト指向プログラミング言語との相性が良いため、Java (1.2以降) や.NET Framework、Ruby (2.1以降) などに採用されている。.NET FrameworkではGeneration 0, 1, 2の3世代に分かれている。Pythonでは主に参照カウント方式によるライフサイクル管理がなされるが、補助的に（伝統的なマーク＆スイープとは逆順の探索アルゴリズムによる）世代別GCを併用している。