如果我在应用程序仍在运行时修改项目中的类会发生什么?

时间:2014-02-23 12:50:47

标签: java eclipse jvm

我使用Eclipse并编译并运行了一些项目。然后我决定修改一些课程。 似乎运行项目没有赶上更改,但如果我运行另一个项目实例,那么它确实看到了更改。 问题是,Eclipse如何排除这一点? 因为我看到.class文件存储为单个实例,后来的更改只是覆盖之前的。也许JVM会在内存中加载类,即使它们发生了变化也不会触及它们。但我想听听完整的故事。

1 个答案:

答案 0 :(得分:7)

当程序运行时,它会将.class文件读入内存并从此使用该副本。

如果更改,则不会重新读取文件并再次加载/链接,这会更复杂。有类加载器可以自动执行此操作,但这不是默认行为。 (它也非常不可靠,因为您可能以不兼容的方式更改类,例如修改字段或方法签名)

一般来说,软件是以可以想象的最简单的方式实现的。如果它很简单,它更有可能工作和被理解。在尝试了解计算机的工作原理时,这应该是您的指导原则。