[seasar-javadoc:1007] Re: UnitClassLoader
Hideaki Suzuki
[E-MAIL ADDRESS DELETED]
2007年 8月 29日 (水) 23:09:01 JST
鈴木(belltree)です。
またちょっと変えてみました。推敲したつもりですが、推低(?)してるかもですが…
変更点は、内容が重複した部分の排除と、文章
* なお、 このクラス自体に付加的な機能はなく、 前述の<code>S2TestCase</code>のように、使われ方によって意味を持ちます。
の追加、および全体的な推敲です。
* {@link org.seasar.extension.unit.S2TestCase S2TestCase} を使用した単体テスト等で使用する
* {@link ClassLoader} です。
*
* アスペクトを適用したクラスを大量に使用するテストを、 連続して実行する際に、 {@link OutOfMemoryError}の頻発を回避する目的で使用します。
*
* <p>
* テストケースによっては、 アスペクトを適用したクラスが大量に生成される場合が考えられます。 クラスは通常、 VMのパーマネント領域にロードされますが、
* 新たにクラスをロードする領域がなくなると、 {@link OutOfMemoryError} が発生します。
* {@link org.seasar.extension.unit.S2TestCase S2TestCase} では、
* この問題を回避するために<code>UnitClassLoader</code>を使用しています。
* なお、 このクラス自体に付加的な機能はなく、 前述の<code>S2TestCase</code>のように、使われ方によって意味を持ちます。
* </p>
* <p>
* ここでは、 {@link org.seasar.extension.unit.S2TestCase S2TestCase}の中で、<code>UnitClassLoader</code>が、
* <code>OutOfMemoryError</code>の問題を解決するために、 どのように使用されているのかを説明いたします。
* <code>S2TestCase</code>では、 テストメソッド毎に{@link org.seasar.framework.container.S2Container S2コンテナ}を生成して、
* アスペクトを適用したクラスをクラスローダにロードします。
* 通常、 クラスはシステムクラスローダによりパーマネント領域にロードされ、 次のテストメソッドの実行に移っても残ったままとなります。
* このままでは新たにクラスをロードする領域がなくなる恐れがあります。 そこで、 <code>S2TestCase</code>では、
* テストメソッド毎にカレントクラスローダを親とする<code>UnitClassLoader</code>を生成し、
* アスペクトを適用したクラスをこのクラスローダを使用してロードします。 テストメソッド終了後に、
* 生成した<code>UnitClassLoader</code>をアンロードすることで、 使用されたクラス群は参照を失いGCの対象となります。
* このような仕組みにより、 <code>S2TestCase</code>では、 アスペクト適用クラスがパーマネント領域に残る問題を解決しています。
* </p>
宜しくお願いします。
P.S. ほぼ日記になりつつあるような・・・いいのかなぁ・・・
/**
* @auther Hideaki Suzuki
* @contact [E-MAIL ADDRESS DELETED]
*/
seasar-javadoc メーリングリストの案内