JVM执行应用程序时是多次读取的jar文件?

时间:2013-03-05 12:28:20

标签: java jvm

对于长时间运行的程序,JVM是否多次从磁盘读取.jar文件,或者只读取一次并且整个映像都在内存中直到JVM终止?

我正在运行大约需要26个小时的工作,接近结束时有一个未定义的对象异常(NoClassDefFoundError),我认为这可能是因为我正在进行代码更改并重新导出在应用程序运行时,来自开发环境的.jar(也就是说,我在旧磁盘的同一位置创建了一个新的)。

3 个答案:

答案 0 :(得分:2)

不,每次需要加载新类时,JVM都会从jar中读取。

答案 1 :(得分:2)

您可能希望使用标记-verbose:class运行代码,您将看到类加载非常懒惰。 JVM只加载它必须要继续的类。如果在你的程序结束时,你正在做一些需要之前绝对不需要的课程的东西,那么它就会被加载。

这很好地解释了你得到的错误,你应该注意到你不应该替换正在运行的jar(或类)文件,正是因为这个原因。

答案 2 :(得分:1)

如果您正在使用类的导入和正常使用,那么每个类只使用一次。

如果您使用类加载器,反射比您可以进行额外读取和“未计划行为” - 这意味着每个类很多次。