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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
2014年1月8日 (水) 11:28時点におけるTurin9 (トーク)による版 (世代別GCが採用された言語にRuby(2.1以降)を追加しました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

世代別ガベージコレクション(Generational Garbage Collection 別名:Generation Scavenging:ジェネレーション・スキャベンジング)はガベージコレクションの一手法。(以下、ガベージコレクションをGCと省略する。)

ガベージコレクションを持つ言語上で動く実システムでは、経験上メモリオブジェクトの利用にある偏りが存在する。それは「計算途上で利用される一時オブジェクトは数が多く、かつすぐさま破棄される率が高い」「ある程度長く生存したオブジェクトは、以降も長く生存する率が高い」という傾向である。

この傾向に着目し、メモリ領域を二つの世代に分離する。

  • 第一世代(young generation)に属するオブジェクトは小さな領域で高速なコピーGCを繰り返し、積極的に回収する。
  • 第二世代(old generation)に属するオブジェクトは基本的に回収せず、システム全体のメモリが不足するようならマーク・アンド・スイープなどで整理する。

というルールを与える。そして第三のルールとして

  • 第一世代の回収をある一定回数生き延びたメモリは第二世代に移動する。

を考えるのが世代別GCである。

世代別GCは汎用のガベージコレクションとしてバランスに優れており、また世代間移動のしきい値や第一世代領域のサイズなど、チューニングがしやすいこと、仮想記憶との相性が良いことなど、利点が多い。特にオブジェクト指向言語との相性が良いため、JavaPythonRuby(2.1以降)などに採用されている。