[Seasar-user:465] Re: コンストラクタによるコンポーネント生成で問題

B isid.co.jp Yasuo Higa higa
2004年 3月 12日 (金) 12:47:14 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:464] Re: コンストラクタによるコンポーネント生成で問題" において、
   "Masataka Kurihara <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> 栗原です。
> 
> > 今は、インスタンスモードがprototypeの場合、initMethodは呼ばれず、
> > methodタグは呼ばれるという中途半端な仕様になっているので、
> > initMethodは呼ばれるが、destroyMethodは呼び出されないという
> > 仕様に変えておきます。
> > 
> > prototypeの場合、destroyMethodを呼び出せないのは、
> > インスタンスがコンテナ管理外のためです。
> > Springがどうなっているか後で調べてみます。
> 
>   なるほど。まだprototypeはまったく見てませんが、ぱっと思いつき
> 的にはWeakReferenceでリリース時にコールバックしてくればよいよう
> な気がします。。。が、バイトコードエンジニアリングしないといけ
> ないのかな?なんかスマートな手はありそうですね。
>   シンプルにできるならば、prototypeでもdestroy呼べたほうが良いと
> は思います。
> 
SpringはSingletonのときのみ、destory-methodを呼び出すみたいです。

で、S2はといえば、WeakReferenceだとReferenceQueueを使って、
ポーリングでしか処理できないようなので、大量にインスタンスが
作成されたときに、インスタンスの開放が遅れて、OutOfMemoryに
なる可能性がありそうです。

AOPを使って、finalizeで終了処理を組み込む手もあるのですが、
なんかやりすぎな気がするので、prototypeのときは、
destroyMethodは呼び出さないということにしたいと思います。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



Seasar-user メーリングリストの案内