双亲委派机制一

类加载器 JDK8

  • 类加载器是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术
  • 类加载器只参与加载过程中的字节码获取并加载到内存这一部分

类加载器的分类

  • 扩展类加载器ExtClassLoader
  • 应用程序类加载器AppClassLoader
  • 启动类加载器BootstrapClassLoader(虚拟机底层C++实现的类加载器)

双亲委派机制

  • 解决一个类到底由谁加载的问题
  • 当一个类加载器接收到加载类的任务时,会自底向上查找是否被加载过,再自顶向下进行加载
    • 从顶往下依次为:BootstrapClassLoader、ExtClassLoader、AppClassLoader
  • 向上查找是否加载过
  • 向下尝试加载
  • 案例
ClassLoader classLoader = Test.class.getClassLoader();
Class<?> aClass = classLoader.loadClass("java.lang.String");
System.out.println(aClass.getClassLoader());

使用AppClassLoader加载java.lang.String,但是输入String的类加载器为null(BootstrapClassLoader),证明了向上查找是否加载过,加载过直接返回

双亲委派机制-问题

  • 重复的类
    • 如果一个类重复出现在三个类加载器的加载位置,应该由谁来加载?
    • 启动类加载器加载,根据双亲委派机制,它的优先级是最高的
  • String类能覆盖吗
    • 在自己的项目中去创建一个java.lang.String类,会被加载吗
    • 不能,会返回启动类加载器在rt.jar包中的String类

类加载器的双亲委派机制-面试

  • 当一个类加载器去加载一个类的时候,会自底向上查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再由顶向下进行加载
  • 应用程序类加载器的父类加载器是扩展类加载器,扩展类加载器的父类是启动类加载器
  • 双亲委派机制的好处有两点
    • 避免恶意代码替换JDK中的核心类库,比如java.lang.String,确保核心类库的完整性和安全性。
    • 避免类被重复加载
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

创梦流浪人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值