我有一个运行java二进制代码(xx.jar文件)的服务器程序。当它运行时,我错误地删除了xx.jar文件。程序将继续运行。但我不确定结果是否正确,我也不确定程序是否会失败。
当我删除xx.jar文件时,程序在方法中存在了很长一段时间,并且仍然在该方法调用中。当它调用另一个方法调用时,我的程序会失败吗?
我之所以问这个问题,是因为如果删除文件没有坏处,我将在服务器计算机上获得大约3-4小时的时间
发布于 2010-04-23 15:54:47
这取决于您的操作系统,这将是或不会是一个问题。例如,在Linux上,直到所有打开该文件的应用程序都将其关闭,该文件才会被真正删除。该文件将从目录列表中消失,但它仍然存在,并且可以读取(甚至写入!)由打开了有效文件描述符的任何应用程序执行。
我不知道JVM是否保持文件描述符对应用程序的所有jar文件开放。我不会依赖它这样做,即使它有时看起来工作得很好。
发布于 2010-04-23 15:52:49
不能保证JVM会将.jar文件中的所有类都加载到内存中,尽管作为优化,它可能会预先加载部分或全部.jar。
如果这失败了,我想它会在某个时刻发生,它不会在方法的执行过程中发生。此时必须从类路径加载一个新类,并且JVM不能再访问该文件。那么你可能会因为NoClassDefFoundError或者更糟的情况而失败。
所以,不,我绝对不会建议你这样做,即使它在某些情况下是有效的。
发布于 2010-04-23 16:14:39
当您完全部署和重新部署应用程序并重新启动它时,您就会知道这一点。
依赖项功能将失败并抛出Expection
https://stackoverflow.com/questions/2696970
复制相似问题