BootstrapClassLoader\ExtensionClassLoader\AppClassLoader都继承自java.lang.ClassLoader
时间: 2024-02-15 10:00:39 浏览: 21
BootstrapClassLoader、ExtensionClassLoader和AppClassLoader都是Java中的类加载器,它们都继承自java.lang.ClassLoader类。
1. BootstrapClassLoader(引导类加载器)是Java虚拟机的一部分,它负责加载Java的核心类库,如java.lang包中的类。它是Java类加载器中最顶层的类加载器,由C++实现,无法直接在Java代码中获取到。
2. ExtensionClassLoader(扩展类加载器)是用来加载Java的扩展类库,它负责加载Java扩展目录(jre/lib/ext)中的类库。它是由Java编写的,是AppClassLoader的父类加载器。
3. AppClassLoader(应用程序类加载器)是用来加载应用程序的类和资源文件的。它负责加载应用程序的classpath下的类库和资源文件。AppClassLoader是Java中默认的类加载器,也是大多数应用程序使用的类加载器。
这三个类加载器按照父子关系依次组成了Java类加载器的层次结构,每个类加载器都有自己的加载范围和加载策略。当一个类需要被加载时,Java虚拟机会按照类加载器的层次结构从上到下依次尝试加载,直到找到所需的类或者无法找到类为止。
相关问题
bootstrapclassloader
BootstrapClassLoader是Java虚拟机中的一个类加载器,它是所有类加载器的祖先。它负责加载Java运行时环境中的核心类库,如java.lang包中的类。BootstrapClassLoader是由JVM自带的,它不需要被显式地指定或创建。它的加载路径是由JVM实现者预先定义好的,一般情况下是从JRE的lib目录下加载。由于BootstrapClassLoader是Java虚拟机中最早启动的类加载器,因此它的加载路径是最高优先级的。
Java的双亲委派机制案例说明
Java的双亲委派机制是指在类加载时,先从父类加载器中查找是否已经加载了该类,如果没有则由子类加载器加载。这种机制可以保证类的唯一性,防止类的重复加载,提高了类加载的效率。
例如,我们在编写一个Java应用程序时,使用了Java标准库中的类,如java.lang.String类。当程序运行时,会首先由系统类加载器(AppClassLoader)加载该类,然后系统类加载器会委派给父类加载器(ExtClassLoader)去查找该类是否已经被加载,如果还没有被加载,则再委派给父类的父类加载器(BootstrapClassLoader)去加载。如果最终还没有找到该类,则会抛出ClassNotFoundException异常。
这种机制的好处在于:如果一个类已经被加载了,那么它就不需要再次被加载,这可以避免类的重复加载,提高了应用程序的性能。
总之,Java的双亲委派机制是一种很好的机制,它可以保证类的唯一性,防止类的重复加载,提高了类加载的效率。