[Seasar-user:1708] Re: OutOfMemoryError が発生してしまいます。

Yokota Takehiko takehiko
2005年 3月 31日 (木) 11:32:50 JST


横田です。

伊藤さん、小林さん、回答ありがとうございます。

On Thu, 31 Mar 2005 01:00:38 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:

> クラスローダーが回収されればそのクラスローダーによって
> ロードされたクラスもアンロードされるのは確かなのですが,
> 問題はクラスローダーが回収されるかどうかですね.

はい、そこが知りたかったのです。

> S2AOP では,クラスローダーと Javassist が提供する
> ClassPool へのマップを保持しています.
(略)
> よって,S2AOP として保持しているクラスローダーへの参照は全て
> 弱参照なので,クラスローダーの回収を妨げることはないと思われますが,
> 実際に確認してみないと安心できませんね.
> # 正確には通常の参照が一つありますが,使っていないので常に null です.

理解しました。確認は、こちらで開発中のアプリが動作する段階になったら
こちらでも行なってみますが、まだ動かないのです…。

> もうひとつ注意が必要なこととしては,生成されたクラスが
> どのクラスローダーでロードされるかという問題があります.
(略)
> 多くの場合,エンハンスの対象となるクラスは S2 コンテナが
> コンテキストクラスローダーからロードしたクラスになると思いますが,
> そのクラスローダーが親クラスローダーに先に委譲する場合で,
> 親クラスローダーのクラスパスにターゲットのクラスが含まれていると,
> エンハンスされたクラスも親のクラスローダーからロードされます.

S2AOPやAOPの機構について詳しくないため「エンハンス」が何を意味する
か分かっていませんが(アスペクトを付与するために元クラスのプロキシ
クラスのようなものを生成すること?)、エンハンスされたクラスは自前
のクラスローダで管理しているのかと思っていました。元クラスのクラス
ローダからロードされるのですね。それだと確かに元クラスをロードした
クラスローダをアンロードしない限りS2AOPが生成したクラス等のオブジェ
クトはガーベッジコレクタに回収されないことになりますね。その点はこ
ちらでも気をつけてアプリ開発をしたいと思います。

> > 今そういうアプリの開発を計画しているので教えて頂ければ幸いです。
> 
> 問題があればどんどん指摘してください.
> 可能な限り対応します.

ありがとうございます。また質問や相談をさせていただくかもしれません。

丁寧なご説明ありがとうございました。

--------
  YOKOTA Takehiko
    [E-MAIL ADDRESS DELETED]




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