BootstrapClassLoader未在委派模型中加载

时间:2019-11-24 17:32:51

标签: java jvm classloader

我只是在重新讨论JVM概念,并试图进行委托检查。考虑下面的代码

public class SrkDelegationDemo {
  public static void main(String[] args) {
    ClassLoader cl = ClassLoader.getSystemClassLoader();
    while (true) {
      System.out.println("ClassLoader is " + cl);
      ClassLoader parent = cl.getParent();
      if (parent == null) {
        System.out.println("Last Classloader which has no parent = " + cl);
        // This line should print Bootstrap
        break;
      }
      cl = parent;
    }
}

输出

  

ClassLoader是sun.misc.Launcher$AppClassLoader@ab770638
  ClassLoader是sun.misc.Launcher$ExtClassLoader@75c10082
  没有父代的最后一个类加载器= sun.misc.Launcher$ExtClassLoader@75c10082

从网上阅读的内容来看,我也期待BootstrapClassLoader,对此不确定。 我正在使用adopt-openjdk-with-openj9-jvm,而JDK版本是jdk8u212-b03

1 个答案:

答案 0 :(得分:2)

Bootstrap类加载器没有相应的java.lang.ClassLoader对象;它的实现在JVM内部。否则,谁会加载java.lang.ClassLoader类?

ClassLoader.getParent的规范所述,

  

某些实现可能使用null来表示引导类   装载机。在这种实现中,此方法将返回null   类加载器的父级是引导类加载器。

OpenJDK就是这样的实现。