什么是双亲委派机制

1. 编译和类加载

首先说一下类加载机制。
我们自己写的.java文件到最终运行,必须经过编译和类加载这两个阶段。
编译的过程就是把.java文件编译成.class文件。
类加载就是把.class文件加载到JVM内存里面。装载完成以后会得到一个class对象,就可以使用new关键字来实例化这个对象。

类加载过程需要涉及到类加载器,JVM在运行的时候会产生三个类加载器,这三个类加载器组成了一个层级关系,每一个类加载器,分别去加载不同作用范围的jar包。

启动类加载器:主要负责Java核心类库的加载,也就是 {JRE_HOME}/lib/rt.jar 和 {JRE_HOME}/lib/resources.jar
扩展类加载器: {JRE_HOME}/lib/ext/*.jar和class文件
应用类加载器:主要负责当前应用里面classpath下面的所有jar包和class文件
自定义类加载器:除了系统提供的类加载器,还可以通过ClassLoader类来实现自定义加载器,去满足一些特殊场景的需求。

2. 双亲委派模型

双亲委派模型就是按照类加载器的层级关系,逐层进行委派。
比如,当加载一个.class文件的时候, 首先会去把这个.class文件的查询和加载委派给父加载器去执行,如果父加载器都无法加载,那么再尝试自己来加载这样一个.class文件。

好处有两个:
安全性。这种层级关系实际上代表的是一种优先级,也就是说所有的类加载优先要给到启动类加载器,对于核心类库中的一些类,就没有办法被破坏。比如自己写了一个java.lang.String,最终还是会交给启动类加载器。再加上每个类加载器的本身的一个作用范围,那么自己写的java.lang.String就没有办法去覆盖类库中的类。
层级关系的设计可以避免重复加载导致程序混乱的问题。因为父加载器已经加载过了,子加载器就没有必要再去加载了。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘新鲜事儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值