双亲委派机制

什么是双亲委派机制

双亲委派机制可以分为两个过程,一个是向上委托,一个是向下尝试加载。
首先,当类加载器需要加载某一个.class字节码文件时,则首先会把这个任务委托给他的上级类加载器,重复此过程,直至委托到了启动类加载器。
然后,启动类加载器去尝试加载该.class文件,查看该.class文件是否属于自己的加载范畴,是则加载,不是则让下级类加载器尝试加载,重复此过程。要是最初的类加载器的所有上级加载器都没有加载该.class文件,最初的类加载器才会加载。

类加载器的类别

以下顺序为父加载器(上级类加载器)到子加载器(下级类加载器)

BootstrapClassLoader(启动类加载器)

BootstrapClassLoader(启动类加载器)
c++编写,加载java核心库 ,也就是 %JAVA_HOME%/lib 路径下的jar包。由于启动类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。 (获取启动类加载器会返回null值)

ExtClassLoader (标准扩展类加载器)

ExtClassLoader (标准扩展类加载器)
java编写,加载扩展库,也就是 %JAVA_HOME%/jre/lib/ext 路径下的jar包,开发者可以直接使用标准扩展类加载器。

AppClassLoader(应用程序类加载器)

AppClassLoader(应用程序类加载器)
java编写,加载程序所在的目录,CLASSPATH路径下指定,如未设置则为应用程序当前路径。

CustomClassLoader(用户自定义类加载器)

CustomClassLoader(用户自定义类加载器)
java编写,用户自定义的类加载器,可加载指定路径的class文件。可以由 ClassLoader.getSystemClassLoader() 方法获得,所以一般也称它为系统类加载器。

JAVA_HOME、CLASSPATH这些是系统环境变量中的参数名,%JAVA_HOME%对应该参数值

双亲委派机制的执行过程

图片源于网络
图片源于网络。

双亲委派机制的作用

1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。

2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。(如,你写了一个Java.lang.String类,通过双亲委派机制就不会加载这个类,而是加载核心库中Java.lang.String)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三人行v

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

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

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

打赏作者

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

抵扣说明:

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

余额充值