首页 > 解决方案 > Java HotSpot:类的延迟加载不起作用

问题描述

java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

Java 延迟加载类不起作用。例如,

public class Foo() {

   public Bar createBar() {
        return new Bar(false);  <----------raised exception
   }
}

public class Bar {
   public Bar(boolean createHello) {
      if (createHello) {
          Hello hello = new Hello();  // Hello: not in runtime classpath
          ...
      }

   }

}

Hello 类对于应用程序是可选的,因此它可能不在运行时类路径中。

运行代码时,JVM 抛出

java.lang.NoClassDefFoundError: Hello

new Bar(false)执行构造函数之前指示的行。

对于类的延迟加载,永远不应加载 Hello.class。

Java HotSpot JVM 是否使用延迟加载类?延迟加载是 JLS 标准还是特定于实现?

如何解决这个问题?反思对我们来说不是正确的解决方案。

标签: javaclasslazy-loading

解决方案


推荐阅读