[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] 大量のインスタンスを管理するクラスがあるときのGC




前橋です。

同僚から相談を受けましたので...

設計に関する相談です。

あるプログラムでは、あるクラス(およびそのサブクラス)のインス
タンスを大量に生成します。このクラスを仮にHogeとします。

Hoge は、Hogeの中でユニークなIDをデータメンバに持ちます。

そして、大量のHogeを管理するクラスが存在します。これを、仮に、
HogeManagerとします。

HogeManagerは、配列だか連結リストだか(知りませんが)を使用し
て、大量のHogeのインスタンスを保持しています。

HogeManagerの役目は、利用者の要求により、新しいHogeを生成(新
しいIDを採番して)したり、使用者からのHogeの検索要求(キーは
ID)を受けて、該当するHogeインスタンスへのポインタ(実体は複製
しない)を返したりすることです。

ここからが問題なのですが、

どの利用者からも参照されなくなった時点で、Hogeのインスタンス
を解放したいのです。

でも、HogeManagerが、Hoge へのポインタを保持しているので、GC
は回収にきてくれません。

Hogeに参照カウンタを保持して、利用者からインクリメント・デク
リメントさせるのはダサダサです。

こういう場合、どうするのが適当なのでしょうか?

私も、こういう形で相談を受けただけなので、具体的に何をしたい
のかは知りません。でも、要求としては、無理のない(よくありそ
うな)ものだと思います。

要は、Hogeクラスのクラスエクステントみたいなことをやりたいん
でしょうね。

とりあえず、今、案としてあるのは、

class HogeRef {
    Hoge hoge;
}

みたいなクラスを使用して、Hogeへの参照は必ずこいつを介すよう
にし、HogeRefのコンストラクタとデストラクタでHogeの参照カウ
ンタを増減させたらどうか、というものです。

でも、これもダサダサなような...

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------