JAVA动态加载和卸载jar包

JAVA动态加载jar包的代码如下:

URLClassLoader urlClassLoader = null;
public void load() {

File file = new File("C:\Users\dengshengcai\Desktop\新建文件夹 (2)\analyse_plugins.jar");

System.out.println(new File(".").getAbsolutePath());

try {
urlClassLoader = new URLClassLoader(new URL[]{file.toURI().toURL()});
Class classStudentServiceImpl = urlClassLoader.loadClass("com.el.cardata.analyse.plugins.Test");
Object o = classStudentServiceImpl.newInstance();
IAnalyse iAnalyse = (IAnalyse) o;

if (null != iAnalyse)
iAnalyse.analyse(null);

Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}

卸载jar包的代码如下:
public void unLoad() {

if (null != urlClassLoader)
ClassLoaderUtil.releaseLoader(urlClassLoader);

}


使用上述代码动态加载和卸载jar包,经过测试,发现一些比较特殊的情况,针对到我的测试,我谈谈对动态加载jar包的几种测试情况:
1.在动态加载的jar包中包含静态变量的值,当unload之后重新load进来时已全部清空,即load之后完全是一个新环境;
2.在动态加载的jar包中如果启动了新线程,且线程一直运行,在unload之后,线程并未结束,但是被加载的jar包文件(例子中的文件为:"C:\Users\dengshengcai\Desktop\新建文件夹 (2)\analyse_plugins.jar")却可以被删除,说明该jar包已经被jvm释放了。这种情况的具体原因不清楚,待以后去了解分析;



原文地址:https://www.cnblogs.com/kxxx/p/6840097.html