浅析类加载器--双亲委派机制

任何一个class加载到内存中时候,实际上生成了两块内容,如String.class文件,这个class文件平时存储在硬盘中,这些被加载到内存中的时候,内存中实际上会存在两块内容,其中一块是二进制的东西,放到了内存中,另一块是生成的class类的对象,而这个class类的对象,指向了存放二进制的内存。

以后其他的对象,要访问String这个类,就会通过访问生成的class类的对象,再通过其生成的class类的对象访问对应的二进制编码,以实现访问及调用。

解释由上至下:

Bootstrap是最顶级的类加载器,是由c++实现的,主要用于家在JDK中核心类库中的信息,如果获取类的加载器为空(null),那么就表示此时加载该类的使用的是Bootstrap

Extension用于加载jre中扩展包中的信息

APP用于加载用户自定义的类

Custom ClassLoader则为用户自定义的类加载器

注意:类加载器的加载机制是双亲委派机制,类加载器的关系不是继承关系,换句话说,他们之间产生关系,不是通过继承产生的,而是通过引入一个引用类型为其父亲的属性,如APP的父加载器:Extension parent,而产生关系的。

类加载双亲委派机制的类加载过程:

解释双亲委派:即有一个从子到父的过程,还有一个从父到子的过程。

 

为什么类加载要是用双亲委派机制呢?

安全!

如果不使用双亲委派机制,那么用户可以自己写一个类去覆盖JDK提供的类,比如java.lang.String,重写这个类,然后重新打成jar包上传,那么凡是使用了该用户上传的jar包的,所有使用到的String类型的信息,都会被自己定一个String类拦截扫描,就会存在一些不安全的因素。

所以双亲委派机制的主要目的就是为了安全!

当然,父已经加载过了,就不需要再加载了,这样也可以节约资源。

总结:

父加载器:父加载器不是“类加载器的加载器”,也不是“类加载器的父类加载器"!我们所说的父加载器是指类中的parent。

双亲委派机制:是一个孩子向父亲方向,然后父亲向孩子方向的双亲委派过程。

类加载过程使用双亲委派机制的目的:安全,节约资源

注:以上所有内容,均通过观看马士兵老师的视频教程总结而出,请勿用于商业。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值