类加载器

雨点打透心脏的1/2处 2022-01-27 12:07 352阅读 0赞

加载动作在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 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读