类加载器

    xiaoxiao2025-03-30  15

    加载动作在JVM外部实现, 以便让应用程序决定如何获取所需的类. JVM 提供三种类加载器.

    启动类加载器 (Bootstrap ClassLoader)

    负责加载 JAVA_HOME\lib 目录中的, 或通过-Xbootclasspath 参数指定路径中的, 且被 虚拟机认可(按文件名识别, 如 rt.jar) 的类

    扩展类加载器(Extension ClassLoader)

    负责加载 JAVA_HOME\lib\ext 目录中的,或通过 java.ext.dirs 系统变量指定路径中的类 库

    应用程序类加载器(Application ClassLoader)

    负责加载用户路径(classpath)上的类库


    JVM 通过双亲委派模型进行类的加载, 当然我们也可以通过继承 java.lang.ClassLoader 实现自定义的类加载器。

    双亲委派

    当一个类收到了类加载的请求, 他首先不会自己去加载这个类, 而是将请求委托给它的父类, 每一层类加载都是如此, 所以所有请求都会到启动类加载器中, 只有父类加载器反馈请求无法完成的时候, 子类加载器才会去尝试加载.

    采用双亲委派的一个好处是比如加载位于 rt.jar 包中的类 java.lang.Object,不管是哪个加载 器加载这个类,最终都是委托给顶层的启动类加载器进行加载,这样就保证了使用不同的类加载 器最终得到的都是同样一个 Object 对象。

    最新回复(0)