2012-03-09 23 views
2

Java標準ライブラリ(java。*パッケージに定義されているライブラリ)をアンロードすることは可能ですか? 。 - Javaの*クラスJava標準ライブラリをアンロードする方法

for(String testClass : testClasses) { 
    CustomClassLoader cl = new CustomClassLoader(this.getClass().getClassLoader()); 
    Class<?> _class = cl.loadClass(testClass); 
    JUnitCore junit = new JUnitCore(); 
    Result result = junit.run(_class); 
    registerResult(result, cl); 
} 

私が午前問題は、いくつかのクラスがアンロードされていないということですので、同じよう

私のアプリケーションは、JUnitテストを実行するためにClassLoader、自身の持つそれぞれを必要とします。

アンロードしないと、テストクラスがjava.security.Securityクラスで提供される静的メソッドを使用してオブジェクトを格納し、次にClassCastExceptionを取得するとどうなりますか。

強制的に荷降ろしする方法はありますか?

+0

通常、標準のJavaクラスは、CustomClassLoaderの親クラスローダーによって(一度)ロードされます。だから私は実際にそれらをアンロードするための要件を理解していません。 –

+0

@Andreas_Dシングルトンのようなテストランで共有される静的なグローバル値がある可能性があるためです。 – aperez

答えて

3

クラスを強制的にアンロードすることはできません。クラスまたはクラスのインスタンスが参照されている限り、それはgcによって収集されません。各テストの前または後にこれらのグローバル値を手動で削除する必要があります。

単体テストでは、新しいテストですべてのテストを実行できます。 (これは静的なクラスのデータを避けますが、ファイルのような他のグローバルなものは避けてください)。

これらのリンクは役立つことがあります。確かに

Running each JUnit test in a separate JVM in Eclipse?

How to tell Maven2 to execute jUnit tests one by one each in new JVM instance?

0

は、TEシステムクラスをアンロードする方法はありません。私は何かが足りないと思う。

関連する問題