类加载器之双亲委派机制

java中类加载器的分类

1.引导类加载器:负责加载支撑JVM运行的位于jre下lib目录中的核心类库
2.扩展类加载器:负责加载支撑jre中lib下ext中的类库
3.应用程序加载器:负责加载ClassPath下的类,也就是我们自己写的类
4.自定义加载器:加载自己定义路径下的jar文件

类加载器的初始化过程

1.先创建实例Launcher使用的是单例模式,保证jvm只有一个Launcher实例
2.在Laucher构造方法内部创建了两个类加载器,分别是扩展类加载器和应用类加载器
3.jvm默认使用应用类加载器加载我们的应用程序

双亲委派机制流程

1.先在应用类加载器中使用findLoadedClass方法当前类加载器是否加载了当前类,如果加载了就直接返回
2.如果没有加载过当前类,还要再判断是否有父加载器,如果有父加载器,则由父加载器加载,最终到bootstrap加载器
3.最终bootstrap加载器也没有加载过当前类,那么执行findClass完成加载,但是bootstrap加载器find不到,再交给ext加载器find,如果ext也没有find到,就交给app加载器find,只要find到了就要完成类的加载。

为什么要设计双亲委派机制

1.沙箱安全机制:自己写的一些类 String Math等包括包名也一致,这些类都不会被加载,防止API库被随便篡改。
2.避免类的重新加载:如果父类加载了此类,子类就没必要再加载了,保证加载的唯一性。

自定义加载器

1.继承ClassLoad类
2.重写loadClass方法
3.重写findClass方法

打破双亲委派机制

自己的类只要不走双亲委派的业务代码就可以,但是用到jdk中的类需要走双亲委派的流程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孤独地卜师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值