替换类路径中的 jar 后出现 ClassNotFoundException

pra*_*nth 2 java jar

我有一个 java 进程在类路径中运行两个 jar 文件,即
- A.jar
- B.jar
在进程运行时,我用另一个 B.jar 替换了 B.jar,我用一些文件更新了它。现在在我的过程中,我看到 B.jar 中的类有一些 ClassNotFoundException 。我不明白这里发生了什么。我认为 jars 会在 java 进程启动时加载。如果是这样,为什么会发生这种情况?有人可以帮我解决这个问题吗??我知道如果我重新开始这个过程,一切都会好起来的。但我很想知道这背后的原因。

Jon*_*han 5

JAR 文件中的类在首次使用时加载,而不是在 JVM 启动时加载。通过在应用程序运行时替换 B.jar,如果您删除了其他人引用的类,您将获得一个 .jar 文件ClassNotFoundException

如果您一段时间未使用的类被垃圾回收,这也可能发生在 Java 7 中。JVM 将尝试重新加载它,并发现它不再在类路径中。如果您使用-XX:+CMSClassUnloadingEnabled启动选项,这也可能发生在 Java 的早期版本中。