如何卸载Java标准库

时间:2012-03-09 11:42:20

标签: java classloader

是否可以卸载Java标准库 - 在java。*包中定义的那些?

我的应用程序需要运行JUnit测试,每个测试都有自己的ClassLoader,如下所示:

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);
}

我遇到的问题是没有卸载某些类 - java。*类。

如果我不卸载它们,那么如果测试类使用静态方法存储对象(如java.security.Security类提供的那些方法),那么我会得到一个ClassCastException

我有什么方法可以强迫他们卸货吗?

2 个答案:

答案 0 :(得分:3)

无法强制卸载课程。只要引用类的类或实例,它就不会被gc收集。您必须在每次测试之前或之后手动删除这些全局值。

对于单元测试,您可以尝试在新的jvm中运行每个测试。 (这将避免静态类数据,但不会避免其他全局遗留文件)。

这些链接可能有所帮助:

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?

答案 1 :(得分:0)

当然,没有办法卸载系统类。我想你错过了什么。