[seasar-javadoc:1004] Re: UnitClassLoader

Hideaki Suzuki [E-MAIL ADDRESS DELETED]
2007年 8月 28日 (火) 23:14:08 JST


鈴木(belltree)です。

やっぱり箇条書きは微妙かなぁ〜と思い直し、文章で書いてみました。具体的な
説明の部分は、後藤さんの説明をマージしています。どうでしょ???

 * {@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>を使用しています。
 * テストメソッドの中で使用するクラス群を、 このクラスローダでロードし、 テスト終了後、クラスローダをアンロードすることで、
 * そのテストメソッドで使用したクラス群が残らないようにしています。
 * </p>
 * <p>
 * 以下、具体的説明します。 
 * {@link org.seasar.extension.unit.S2TestCase S2TestCase}では、 
 * テストメソッド毎に{@link org.seasar.framework.container.S2Container S2コンテナ}を生成して、 
 * アスペクトを適用したクラスをクラスローダにロードします。
 * 通常、 クラスはシステムクラスローダによりパーマネント領域にロードされ、 次のテストメソッドの実行に移っても残ったままとなります。 
 * このままでは新たにクラスをロードする領域がなくなる恐れがあります。 そこで、 {@link org.seasar.extension.unit.S2TestCase S2TestCase}では、
 * テストメソッド毎にカレントクラスローダを親とする<code>UnitClassLoader</code>を生成し、
 * アスペクトを適用したクラスをこのクラスローダにロードさせます。 テストメソッド終了後は、 その<code>UnitClassLoader</code>自体をアンロードするため、 
 * テストメソッドで使用されたクラス群は、 参照がない状態、 すなわちGC対象となるために、 パーマネント領域に残らなくなります。
 * </p>

/** 
 * @auther Hideaki Suzuki
 * @contact [E-MAIL ADDRESS DELETED]
 */



seasar-javadoc メーリングリストの案内