双亲委派机制

1、什么是类加载

ClassLoader:java代码要想正常的运行,就需要通过javac编写成.class文件,然后某种介质加载到jvm(java虚拟机)中运行,所需要的介质就是类加载器(ClassLoader)
在这里插入图片描述

2、类加载器分类

在java中类加载器可以大致分为四类:

  1. 自定义类加载器(CustomClassLoader):这类加载器有用户自己定义,并可以加载指定路径下的class文件。
  2. . 应用程序类加载器(App ClassLoader):加载应用程序classpath目录下的所指定的类库,继承URLClassLoader。
  3. 扩展类加载器(Extension ClassLoader):加载JRE/lib/ext下面指定要用的jar包,继承URLClassLoader。
  4. 启动(根)类加载器(Bootstrap ClassLoader):非常的特殊,它不是java类,该类加载器由C++实现,它嵌套在JVM内核里,当JVM启动时该类加载器就启动了。负责加载Java基础类,对应加载的文件是JRE/lib/ 目录下的rt.jar、resources.jar、charsets.jar等。

3、 什么是双亲委派机制

​ 双亲委派机制指的是当一个类加载器收到一个class字节码文件请求时,该类加载器首先会把请求委派给父类加载器,一直递归这个操做,当在父类加载器内找不到指定类时,子类加载器才会尝试自己去加载这个class文件

双亲:是指有关系的两个对象,就像亲戚一样。委派:是指我做不到的事,委派给你做,你做不到的事情委派给我做。其实就是子类加载器完不成的事情交给父类加载器去做,如果父类加载器找不到加载指定的类时,就会归还给子类加载器,此时,自类加载器只能想办法自己加载了。

4、 类加载器加载过程

在这里插入图片描述
当一个Class文件要被加载时,先不看自己的加载器,首先委派给应用程序加载器(App ClassLoader),此时会判断是否加载此类,如果加载过,就直接直接加载,否则继续向上委派,此时委派给扩展类加载器(Extention ClassLoad),此时会判断是否加载此类,如果加载过,就直接直接加载,否则继续向上委派,此时委派给启动类加载器(BoootStrap ClassLoad),时会判断是否加载此类,如果加载过,就直接直接加载,否则返回给自定义加载器进行加载,如果此时定义加载器还不能加载,就会抛出ClassNotFond

5、双亲委派机制的作用(优点)

  1. 保证数据的安全性

防止重复加载同一个.class类,通过委托去向上询问父类加载器,如果父类加载器加载过了,就不用再加载一遍,从而确保了数据安全。

  1. 保证数据的唯一性

通过委托的方式,不会去篡改核心.class,从而保证核心.class不被篡改,就算被篡改也不会被加载,就算被加载也不会是同一个class对象。因为对于加载器而且,就算加载同一个.class文件,也不是同一个Class对象。这样保证了Class的执行安全

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值