Java 中 ClassLoader

Java 中 ClassLoader

JVM 中自带 3 个类加载器:
启动类加载器 BootstrapClassLoader

扩展类加载器 ExtClassLoader (JDK 1.9 之后,改名为 PlatformClassLoader)

系统加载器 APPClassLoader

1、AppClassLoader 主要加载系统属性“java.class.path”配置下类文件,也就是环境变量 CLASS_PATH 配置的路径。因此 AppClassLoader 是面向用户的类加载器,我们自己编写的代码以及使用的第三方 jar 包通常都是由它来加载的
2、ExtClassLoader 加载系统属性“java.ext.dirs”配置下类文件,可以打印出这个属性来查看具体有哪些文件
3、BootstrapClassLoader 加载系统属性“sun.boot.class.path”配置下类文件,JRE 目录下的 jar 包或者 .class 文件

双亲委派模式

所谓双亲委派模式就是,当类加载器收到加载类或资源的请求时,通常都是先委托给父类加载器加载,也就是说,只有当父类加载器找不到指定类或资源时,自身才会执行实际的类加载过程。
其具体实现代码是在 ClassLoader.java 中的 loadClass 方法中,如下所示:在这里插入图片描述解释说明:
判断该 Class 是否已加载,如果已加载,则直接将该 Class 返回。

如果该 Class 没有被加载过,则判断 parent 是否为空,如果不为空则将加载的任务委托给parent。

如果 parent == null,则直接调用 BootstrapClassLoader 加载该类。

如果 parent 或者 BootstrapClassLoader 都没有加载成功,则调用当前 ClassLoader 的 findClass 方法继续尝试加载。

注意:“双亲委派”机制只是 Java 推荐的机制,并不是强制的机制。我们可以继承 java.lang.ClassLoader类,实现自己的类加载器。如果想保持双亲委派模型,就应该重写 findClass(name) 方法;如果想破坏双亲委派模型,可以重写loadClass(name) 方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值