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



  • 相关阅读:
    phpcms 任意位置获取用户头像
    php微信公众帐号发送红包
    nginx解决502错误
    phpcms v9 万能字段使用
    0转换为万
    温故而知新(三)
    温故而知新(一)
    基础积累,来自其他网站的链接
    GCD多线程 在子线程中获取网络图片 在主线程更新
    iOS9 中的一些适配问题
  • 原文地址:https://www.cnblogs.com/kxxx/p/6840097.html
Copyright © 2011-2022 走看看