From: Masatoshi SEKI Date: 2000-08-17T01:03:27+09:00 Subject: [ruby-list:24242] Re: drb.rb: 0x40155740 is recycledobject(IndexError) > あっ、すみません。思いっきり飛躍してしまいました (^^; > これはどういうことかというと、 > server側)参照テーブルへのアクセスを開示(set_objをpublicに) > client側)finalizerによりserver側の参照テーブルから自分のidを削除 > という意味です。 > > つまり、clientのDRbObject自身に、server側リモートオブジェクト > への参照が切れたことを通知させます。 > > 「死ぬときは断末魔をあげてね」と設定してあげるわけです。 > > これって比較的すんなり実現可能ですよね。 > 何か間違いがあれば教えてください。それでは。 これは実現できると思うのですが、GCのシステムとしてはうまく いかないのではないでしょうか ? たとえば、 ・クライアント側に障害が発生するとサーバからGCできない ・参照オブジェクトを他のクライアントにコピーしたとき、 参照が残ってるのにGCされてしまう(かもしれない)。 (例. svr のオブジェクトの参照を cli1 が持っていて、 それを cli2 に送ったときなど) など。 DRbObjectも flyweight にしておかないとまずいですね。 同じオブジェクトへの参照が複数あると、一つが GC されただけで サーバに通知がいってしまう。 また、通信が多くなるのも気になります。 # まとめて送るなどの工夫すれば通信回数を減らせるかもしれない。 なんとなく「時限付きの保護」が簡便でいいと思うのだけど、 試しに実装して実験してみるのもおもしろいかも。 そういえばJavaSpacesだでは「リース期間」っていう概念を使うみたい。(たぶん)