首页 > 解决方案 > 哪个类加载器负责加载第一个要加载的类?

问题描述

根据此 JVM 规范,类加载器由谁触发加载来C确定:DC

Java 虚拟机使用三个过程之一来创建类或接口C由 表示的类或接口N

  • 如果N表示非数组类或接口,则使用以下两种方法之一来加载并因此创建C

    • 如果D由引导类加载器定义,则引导类加载器启动C(§5.3.1) 的加载。

    • 如果D由用户定义的类加载器定义,则相同的用户定义的类加载器会启动C(第 5.3.2 节)的加载。

  • ...

那么,基本情况呢?我的意思是,将有第一个要加载的类,显然D 不能在这种情况下定义。

标签: javajvmlanguage-lawyer

解决方案


它在5.2 中指定。Java 虚拟机启动

Java 虚拟机通过使用引导类加载器(第 5.3.1 节)或用户定义的类加载器(第 5.3.2 节)创建初始类或接口来启动。Java 虚拟机然后链接初始类或接口,对其进行初始化,并调用公共静态方法void main(String[])。调用此方法会驱动所有进一步的执行。执行构成主要方法的 Java 虚拟机指令可能会导致附加类和接口的链接(并因此创建),以及调用附加方法。

初始类或接口以实现相关的方式指定。例如,初始类或接口可以作为命令行参数提供。或者,Java 虚拟机的实现本身可以提供一个初始类,该类设置一个类加载器,该类加载器反过来加载应用程序。初始类或接口的其他选择是可能的,只要它们与前一段中给出的规范一致。


推荐阅读