java类加载器本身如何被加载的

java类加载器本身如何被加载的

Java类加载器在JVM中扮演着十分重要的角色,负责加载Java类文件到JVM中。那么,Java类加载器本身是如何被加载的呢?首先,Java类加载器是由Bootstrap ClassLoader加载的,它是JVM自身的一部分,用C++编写,不属于Java类。其次,Bootstrap ClassLoader加载的类包括Java核心类库,如java.lang,java.util等。最后,ClassLoader类是由Bootstrap ClassLoader加载的,而我们自定义的类加载器是由AppClassLoader加载的,它们都是java.lang.ClassLoader的子类。

我们首先来深入解析下Bootstrap ClassLoader。

一、BOOTSTRAP CLASSLOADER

Bootstrap ClassLoader,也被称为启动类加载器,是Java类加载体系中的最顶层的类加载器,负责加载JVM核心类库,如:java.lang,java.util等,Bootstrap ClassLoader是C++实现的,它不属于Java类,因此在Java中无法直接引用。

1.1 Bootstrap ClassLoader的特性

Bootstrap ClassLoader加载的所有类都是被认为是Java语言安全框架的一部分。它们在JVM启动后,就被加载到内存中,一直到JVM关闭才被卸载,因此它们的生命周期是最长的。

1.2 Bootstrap ClassLoader的加载机制

Bootstrap ClassLoader不同于其他的类加载器,它没有父类加载器,但它可以作为其它类加载器的父加载器。Bootstrap ClassLoader加载类的路径也是固定的,一般是JRE的lib路径及其各个子路径。

二、EXTENSION CLASSLOADER

Extension ClassLoader,也称为扩展类加载器,是Bootstrap ClassLoader的子加载器,主要负责加载位于JAVA_HOME/jre/lib/ext目录下,或者由系统变量java.ext.dirs指定目录中的类库。

2.1 Extension ClassLoader的特性

Extension ClassLoader是Java编写的,是sun.misc.Launcher$ExtClassLoader类的实例。它的父加载器是Bootstrap ClassLoader。

2.2 Extension ClassLoader的加载机制

Extension ClassLoader同样遵循双亲委派模型,当加载一个类时,首先会尝试请求其父类加载器或祖先类加载器加载,只有当父类加载器和所有祖先类加载器都无法加载时,才会尝试自己去加载。

三、APPLICATION CLASSLOADER

Application ClassLoader,也被称为系统类加载器,是Java程序默认的类加载器。它负责加载用户类路径(ClassPath)上的类库。

3.1 Application ClassLoader的特性

Application ClassLoader是Java编写的,是sun.misc.Launcher$AppClassLoader类的实例。它的父加载器是Extension ClassLoader。

3.2 Application ClassLoader的加载机制

Application ClassLoader同样遵循双亲委派模型,当加载一个类时,首先会尝试请求其父类加载器或祖先类加载器加载,只有当父类加载器和所有祖先类加载器都无法加载时,才会尝试自己去加载。

四、自定义类加载器

在Java中,开发者可以通过继承java.lang.ClassLoader类来创建自定义的类加载器。自定义类加载器允许开发者按照自己的需求来加载类,例如从数据库、网络、特定文件系统等非传统方式来加载类。

4.1 自定义类加载器的特性

自定义类加载器通常是Application ClassLoader的子类,因此,它们的父加载器通常是Application ClassLoader。

4.2 自定义类加载器的加载机制

自定义类加载器通常也会遵循双亲委派模型,当加载一个类时,首先会尝试请求其父类加载器或祖先类加载器加载,只有当父类加载器和所有祖先类加载器都无法加载时,才会尝试自己去加载。

总结来说,Java类加载器本身是由Bootstrap ClassLoader加载的,而我们自定义的类加载器是由AppClassLoader加载的,它们都是java.lang.ClassLoader的子类。

相关问答FAQs:

Q: 什么是Java类加载器?
A: Java类加载器是Java运行时环境的组成部分,负责将编译的Java类文件加载到内存中并进行解析和执行。

Q: Java类加载器是如何被加载的?
A: Java类加载器本身是由Java虚拟机自动加载的。当Java虚拟机启动时,它会自动加载一组默认的类加载器,并将它们初始化并放置在特定的层次结构中。

Q: Java类加载器的层次结构是怎样的?
A: Java类加载器的层次结构通常包括三个层次:引导类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)。引导类加载器是虚拟机的一部分,负责加载Java核心类库;扩展类加载器负责加载Java扩展类库;应用程序类加载器负责加载应用程序的类。

Q: 是否可以自定义Java类加载器?
A: 是的,Java允许用户自定义类加载器。通过继承java.lang.ClassLoader类,用户可以实现自己的类加载器,并根据自己的需求来加载类。自定义类加载器可以用于实现类的动态加载、热部署等功能。

原创文章,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/416716

(0)
Edit1Edit1
上一篇 2024年8月16日 下午1:37
下一篇 2024年8月16日 下午1:37
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部