是否可以卸载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
。
我有什么方法可以强迫他们卸货吗?
答案 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)
当然,没有办法卸载系统类。我想你错过了什么。