JVM的类加载子系统负责加载相关的类,加载类是JVM中类加载器的功能和职责。
首先明确下JVM中的类加载器,分为以下三种:
- 启动类加载器(Bootstrap ClassLoader)
默认负责加载JAVA_HOME\lib下的类,同时也可以通过参数-Xbootclasspath指定,指定后启动类加载器会加载指定路径的类,但是前提是路径中的类符合虚拟机规范。 - 扩展类加载器(Extension ClassLoader)
负责加载JAVA_HOME\lib\ext下的类。 - 应用程序类加载器(Application ClassLoader)
负责加载用户路径(classpath)下的的类库。
以上的三种类加载器,在逻辑上有父子关系,即应用程序类加载器的父加载器是拓展类加载器,拓展类加载器的父加载器是启动类加载器。还需要明确一点,这里的父子关系不是java中类继承的父子关系,而是子加载器持有一个表示父加载器的引用指向了父加载器,说直白点就是,子加载器中定义了一个叫父加载器的变量,然后指向它的父加载器。