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



  • 相关阅读:
    017 文件xfs_repair恢复,xfs_dump恢复,lvm动态扩容
    003 rsync客户端与服务端小脚本
    002 rsync守护进程传输方式详解
    001 期中架构简介、备份初识
    016 netstat、磁盘分区(fdisk、gdisk)
    015 Linux中常用的信号、HUP信号
    014 进程(PS与TOP)
    013 源码安装(Nginx&php为例)
    本地、远程仓库的搭建
    第八章
  • 原文地址:https://www.cnblogs.com/kxxx/p/6840097.html
Copyright © 2011-2022 走看看