加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java-Process可以删除加载的JAR吗?

发布时间:2020-12-15 08:35:51 所属栏目:Java 来源:网络整理
导读:您好我有以下问题: 在卸载过程中,我加载了一个JAR(jdbc-driver). URL pDriverJar = jarToDelete.toURI().toURL(); URL[] lURLList = new URL[]{pDriverJar}; URLClassLoader lLoader = new URLClassLoader(lURLList,Thread.currentThread().getContextClass
您好我有以下问题:

在卸载过程中,我加载了一个JAR(jdbc-driver).

URL pDriverJar = jarToDelete.toURI().toURL();
    URL[] lURLList = new URL[]{pDriverJar};
    URLClassLoader lLoader =  new URLClassLoader(lURLList,Thread.currentThread().getContextClassLoader());
    Thread.currentThread().setContextClassLoader(lLoader);
    Class<?> aClass = Class.forName("jdbc.Driver"); // was Oracle: oracle.jdbc.OracleDriver but should not be important

    if(jarToDelete.delete()){
        System.out.println("deleted");
    }else {
        jarToDelete.deleteOnExit();
    }

在终止JVM之后,jar仍然存在.

作为一个workarround,我创建了一个临时文件,并将Jar复制到该tempfile.但是现在Tempfile不会被删除.

我读过,如果ClassLoad是GC,可以删除加载的jar.

有没有人有想法,如何删除此文件?

解决方法

这取决于操作系统. Windows不允许您删除正在使用的文件,但Linux会删除.

一种解决方案是启动第二个进程,等待你的JVM死掉然后删除文件,因为即使你清除所有对使用它的类加载器的引用,也不能保证它们会释放文件.没有办法强制对象的垃圾收集(甚至完成).

另一个解决方案是编写加载Jar的类加载器.这样,当你想要摆脱它时,你可以确定Jar是关闭的.如果打开它的唯一对象是您的类加载器,那么您可以确定它是免费的并且应该是可删除的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读