如果我在开始执行xx.jar后删除xx.jar文件会发生什么

ogz*_*ylz 3 java jar

我有一个运行java二进制代码(xx.jar文件)的服务器程序.在它运行时我错误地删除了xx.jar文件.该计划继续运行.但我不确定结果是否正确,我不确定程序是否会失败.

当我删除xx.jar文件时,程序在一个方法中很长一段时间仍然在那个方法调用中.当它调用另一个方法调用时,我的程序会失败吗?

我问这个问题,因为如果删除文件没有任何损害,我将在服务器机器上获得大约3-4小时

Sea*_*wen 7

无法保证JVM会将.jar文件中的所有类加载到内存中,尽管它可能会预先加载部分或全部.jar作为优化.

如果这失败了,我想它会在某个时刻,在执行方法的过程中不会发生.在某种程度上,必须从类路径加载新类,并且JVM不能再访问该文件.然后你会失败NoClassDefFoundError或更糟.

所以,不,我绝对不会建议你这样做,即使它在某些情况下恰好起作用.


Ger*_*ies 6

根据您的操作系统,这会或不会成为问题。例如,在 Linux 上,一个文件在所有打开它的应用程序关闭它之前不会真正被删除。该文件将从目录列表中消失,但它仍然存在并且可以被任何打开有效文件描述符的应用程序读取(甚至写入!)。

JVM 是否保持文件描述符对应用程序的所有 jar 文件开放,我不知道。我不会依赖它这样做,即使它有时似乎工作正常。