对于长时间运行的程序,JVM 是否.jar
多次从磁盘读取文件,还是只读取一次并且整个图像都在内存中,直到 JVM 终止?
我正在运行一项大约需要 26 小时的工作,并且在接近尾声时出现了一个未定义的对象异常 ( NoClassDefFoundError
),我认为这可能是由于我正在更改代码并.jar
从开发环境重新导出 (当应用程序运行时,我在磁盘上与旧磁盘相同的位置创建了一个新磁盘。
不,JVM 每次需要加载新类时都会从 jar 中读取。
你可能想用标志运行你的代码,-verbose:class
你会发现类加载非常懒惰。JVM 只加载它绝对必须继续运行的类。如果在你的程序结束时,你正在做的事情需要一个以前绝对不需要的类,它就会在那时被加载。
这很好地解释了您遇到的错误,您应该注意到您不应该替换正在运行的 jar(或类)文件,正是出于这个原因。
如果您正在使用导入并正常使用类,则每个类只使用一次。
如果您使用类加载器,反射比您可以进行额外的读取和“非计划行为” - 这意味着每个类很多次。