谁加载java.lang.ClassLoader?

时间:2014-12-23 22:36:43

标签: java classloader

我正在阅读如何加载类。似乎java.lang.ClassLoader的实例正在做这项工作。

但谁加载了java.lang.ClassLoader?

1 个答案:

答案 0 :(得分:6)

想想我可以添加这个作为答案,这样人们就可以更容易地看到它......

java.lang.ClassLoader是Java核心库的一部分(作为抽象类),Java提供的实现由JVM由引导类加载器加载。引导类加载器是用本机代码编写的,并在JVM启动时运行,以加载$JAVA_HOME/jre/lib中的所有Java库

引用相关的维基百科条目:Java类加载器:

  

启动JVM时,使用三个类加载器:

     
      
  1. Bootstrap类装入器
  2.   
  3. 扩展类加载器
  4.   
  5. 系统类加载器
  6.         

    bootstrap类加载器加载位于$ JAVA_HOME / jre / lib目录中的核心Java库。这个类加载器是核心JVM的一部分,是用本机代码编写的。

         

    扩展类加载器加载扩展目录中的代码($ JAVA_HOME / jre / lib / ext,或java.ext.dirs系统属性指定的任何其他目录)。它由sun.misc.Launcher $ ExtClassLoader类实现。

         

    系统类加载器加载在java.class.path上找到的代码,该代码映射到CLASSPATH环境变量。这是由sun.misc.Launcher $ AppClassLoader类实现的。

当您使用java -cp <some classes> my.package.MainClass启动JVM时,上面提到的引导程序类加载器将以本机代码(作为JVM可执行文件的一部分)运行,以加载所有Java本机库。然后启动上面提到的类加载器链以加载在命令行和/或类路径参数中指定的任何剩余类。