• 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释放了。这种情况的具体原因不清楚,待以后去了解分析;



  • 相关阅读:
    判断数组的方法
    介绍下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块?
    因为这样那样的原因又滚回来了
    AFO成功
    SDOI2018
    TJOI2018
    杂题
    线段树合并
    几个dp的陈年老题
    【自家测试】2018-5-9
  • 原文地址:https://www.cnblogs.com/kxxx/p/6840097.html
Copyright © 2020-2023  润新知