2006年02月05日

参照カウント

参照カウント(さんしょうカウント)は、ガベージコレクタの動作方法の一つ。

* すべてのオブジェクト(メモリ上におかれているデータの単位)に対して、参照カウントと呼ばれる整数値を付加しておく。これは、このオブジェクトへのポインタがシステム全体にいくつ存在しているかを数えるものである

* オブジェクトへの参照が変化するたびにこの値は随時書き換わる。
* 参照カウントが0になったものについては破棄が許される。

この方法は処理が高速であり、オブジェクトを多数生成し、すぐに参照を切るような処理においても迅速に破棄が起きる。ただ、不要になったオブジェクト同士が循環参照してる場合、参照カウントが0にならないために破棄がおきないという問題がある。

また、参照カウントが頻繁に書き変わる場合には書き換え負荷そのものが問題になる場合もある。さらに、単純な実装の場合、大量のオブジェクトが一斉に解放になる場合があり、 CPUの空き時間を利用してガベージコレクションを行う方法と比べると、メモリの解放で処理が遅くなってしまう場合もある。

class A {
public B b;
}
class B {
public A a;
}
public class Test{
public static void main(String[]arg) {
A a=new A(); // *1*
a.b=new B();
b.a=a;
a=null;
// *1*で作成したAのオブジェクト は到達不可能にもかかわらず、参照カウントは1
}
}

例2

ウィキペディアの「孤立した記事」は、参照カウントが0のものを表示しているだけなので、孤立した記事だけから参照されている記事は孤立した記事と見なされていない。

上で述べた問題を回避する方法としてマーク・アンド・スイープがある。
[編集]

実用例

* マイクロソフトのComponent Object ModelにおけるCOMオブジェクトは参照カウント方式で管理される。
* プログラミング言語Pythonのガベージコレクタは主に参照カウント方式を用いている。
* Boost C++ Library の smart_ptr
posted by シンビアン at 08:42| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/12800603

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。