Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果在开始执行xx.jar之后删除xx.jar文件,会发生什么情况_Java_Jar - Fatal编程技术网

Java 如果在开始执行xx.jar之后删除xx.jar文件,会发生什么情况

Java 如果在开始执行xx.jar之后删除xx.jar文件,会发生什么情况,java,jar,Java,Jar,我有一个运行java二进制代码(xx.jar文件)的服务器程序。当它运行时,我错误地删除了xx.jar文件。程序继续运行。但我不确定结果是否正确,也不确定程序是否会失败 当我删除xx.jar文件时,程序在一个方法中呆了很长时间,但它仍然在该方法调用中。当它调用另一个方法调用时,我的程序会失败吗 我之所以问这个问题,是因为如果删除该文件没有害处,我将在服务器机器上获得大约3-4小时的时间无法保证JVM会将.jar文件中的所有类加载到内存中,尽管它可能会作为优化预加载部分或全部.jar 如果这失败了

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

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


我之所以问这个问题,是因为如果删除该文件没有害处,我将在服务器机器上获得大约3-4小时的时间

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

如果这失败了,我想在某个时候,它不会在方法执行过程中发生。此时必须从类路径加载新类,JVM无法再访问该文件。然后您将失败,出现
NoClassDefFoundError
或更糟的情况


因此,不,我绝对不会建议您这样做,即使它在某些情况下恰好工作。

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


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

您将了解何时完全部署和重新部署应用程序并重新启动它


依赖项功能将失败,并引发Expection

当我删除xx.jar文件时,Currenty程序仍在运行相同的方法。我将完全相同的xx.jar文件放入我删除xx.jar的文件夹中。当程序退出正在运行的方法并调用另一个方法或类时,此解决方案能否防止失败?我的程序现在调用了一个新类,但没有导致错误。感谢上帝,我正在使用Linux。------->>我之前问过的另一个问题-->>当我删除xx.jar文件时,Currenty程序仍在运行相同的方法。我将完全相同的xx.jar文件放入我删除xx.jar的文件夹中。当程序退出正在运行的方法并调用另一个方法或类时,此解决方案能否防止失败ogzylz 3秒前编辑[删除此评论]我的程序现在调用了一个新类,没有导致错误。它继续工作得很好。但在调用其他类/方法之前,我复制了另一个与已删除的xx.jar相同的xx.jar部署。