ロード トップ 最近 履歴 差分 逆検索 検索 ヘルプ 編集

[logo] GC


Garbage Collection

メモリ管理の神話

JSSST のチュートリアルで前田先生がなぜ GC がメジャにならないのかということで,次のようなメモリ管理の神話?という話をされました.

結論としては C/C++ のような言語でメモリ管理の必要なプログラムを書く場合は,BoehmGC のような保守的GC ライブラリを使おうということだった.


アルゴリズム

基本アルゴリズムとその派生

実装上の問題

ポインタとそれ以外との区別

言語仕様との関連

GC 用ビットの確保


マーク・スイープ方式

マークとスイープの二つのフェーズからなる方式. まず,ルートから参照関係(ポインタ)をたどりながらすべての到達可能なオブジェクト(生存オブジェクト)にマークを付けていく(マークフェーズ).次にヒープ全体を走査し,マークがないオブジェクトを回収し,マークビットをクリアする(スイープフェーズ).

コピー方式

ヒープを二つの部分空間に分け,片方の部分空間の先頭からオブジェクトを割り付ける.使用中の部分空間(from space)が満杯になったら,もう一方の部分空間(to space)に生存オブジェクトだけをコンパクションしてコピーする.さらに to space が満杯になったら,to space と from space の役割を逆にしてコピーする.

世代別 GC

「ほとんどのオブジェクトは若くして死ぬ」「古いオブジェクトは若いオブジェクトを参照しない」という仮説を基に,若いオブジェクトに集中して GC しようというのが,世代別 GC.


参照リンク


実装


トピック


(最終更新 Sat May 3 20:36:20 2008)