たぷつきません

おなかがでてきた。もうたぷついてるやん。

メモリリーク2

 higaさん、koichikさんに手早くS2TestFrameworkを見直していただいたおかげで、新たなインスタンスが増殖するということはなくなりました。ありがとうございました。今までは2.2系でやっていましたが、trunkのs2を使おうということになりました。S2Containerも1つにまとまって、良くなっていますね。素晴らしいです。
 ただ完全にクリアはできないようで、containerがdestroyされた後も、org.seasar.framework.aop.javassist.AspectWeaverクラスが、ComponentDefImplをparametersにセットしたまま、Enhancedクラス内でstatic fieldとして配備してしまうためインスタンスがゼロになるということはありませんでした。higaさんのおっしゃっていたAOPでのリーク問題は、多分このことかな?と思っています。試しにsetStaticFieldでparametersをヌルとして定義してみたら、テストケースが終わるごとに綺麗さっぱりなくなりました。リークの基点がここだということは分かりました。もちろんヌルじゃ実行時にエラーになるので意味はないのですが、SoftReferenceにするなどして対応ができないか考えています。1つ不思議なのはUnitClassLoader配下でAspectWeaverによって作られたはずなのにクラスがアンロードされないことです。JavassistのCtClassはClass化した際に消失できたと思ったのですがちょっと深くは追えていません。
 setupContainer, tearDownContainerの最初と最後で、SingletonS2ContainerFactory.init(), .destroy() を実行すれば綺麗さっぱり無くなるのではないかと浅知恵を働かせたのですが、逆に増殖する結果になってしまいました。なかなかに難問ですね。