我有一个运行java二进制代码(xx.jar文件)的服务器程序.在它运行时我错误地删除了xx.jar文件.该计划继续运行.但我不确定结果是否正确,我不确定程序是否会失败.
当我删除xx.jar文件时,程序在一个方法中很长一段时间仍然在那个方法调用中.当它调用另一个方法调用时,我的程序会失败吗?
我问这个问题,因为如果删除文件没有任何损害,我将在服务器机器上获得大约3-4小时
无法保证JVM会将.jar文件中的所有类加载到内存中,尽管它可能会预先加载部分或全部.jar作为优化.
如果这失败了,我想它会在某个时刻,在执行方法的过程中不会发生.在某种程度上,必须从类路径加载新类,并且JVM不能再访问该文件.然后你会失败NoClassDefFoundError或更糟.
所以,不,我绝对不会建议你这样做,即使它在某些情况下恰好起作用.
根据您的操作系统,这会或不会成为问题。例如,在 Linux 上,一个文件在所有打开它的应用程序关闭它之前不会真正被删除。该文件将从目录列表中消失,但它仍然存在并且可以被任何打开有效文件描述符的应用程序读取(甚至写入!)。
JVM 是否保持文件描述符对应用程序的所有 jar 文件开放,我不知道。我不会依赖它这样做,即使它有时似乎工作正常。
| 归档时间: |
|
| 查看次数: |
3709 次 |
| 最近记录: |