双亲委派机制

类加载机制

双亲委派机制

双亲委派机制如图
一般系统的默认应用加载器为AppClassLoader,它加载它负责加载用户类路径(ClassPath)所指定的类。

当加载一个类时,首先由AppClassLoader去尝试加载,AppClassLoader会去找它的父一级加载器,这里的父一级加载器不是指继承关系,而是AppClassLoader有一个成员变量叫parent。让parent去尝试加载,parent也会让parent的parent去尝试加载。
总的来说,AppClassLoader加载类时,会让ExtClassLoader先去尝试加载,ExtClassLoader加载类时,先会让BootStrapClassLoader尝试加载。
BootStrapClassLoader是顶层的加载器,看被加载类是否在JDK\jre\lib,不在就加载不了,当它尝试加载不了时,
给ExtClassLoader加载,看看被加载的类是否在 JDK\jre\lib\ext目录中,在则加载,否则交由 AppClassLoader 加载,AppClassLoader加载时看被加载的类是否在用户类路径(ClassPath)中,不在,则表示找不到,报错ClassNotFunded.

双亲委派机制的好处是安全:
曾经没有双亲委派机制时,有人自己编写了一个String类,全限定名是“java.lang.String” ,跟jdk源码中的一模一样。AppClassLoader没有使用双亲委派机制,直接就加载了它,导致系统中定义的String 被用户自定义的String替换了。双亲委派机制保护了jdk源码的类正确的被加载而不会被用户自定义的类替换掉。

  1. 类加载是缓存机制的,jvm会先从缓存中去取类的class文件。
  2. 类加载的是指类的class字节码文件被读到内存中,放在jvm的方法区,并在堆上创建类的class对象。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值