双亲委派机制的优势和劣势
双亲委派机制优势
避免类的重复加载, 确保一个类的全局唯一性
Java 类随着它的类加载器一起具备了一种带有优先级的层级关系, 通过这种
层级关系可以避免类的重复加载, 当父亲已经加载了该类时, 就没有必要子
ClassLoader 再加载一次
保护程序安全, 防止核心 API 被随意篡改
代码支持
双亲委派机制在 java.lang.ClassLoader.loadClass(String, boolean) 接口中体现。
该接口的逻辑如下:
先在当前加载器的缓存中查找有无目标类, 如果有, 直接返回
- 判 断 当 前 加 载 器 的 父 加 载 器 是 否 为 空 , 如 果 不 为 空 , 则 调 用
parent.loadClass(name, false) 接口进行加载 - 反 之 , 如 果 当 前 加 载 器 的 父 类 加 载 器 为 空 , 则 调 用
findBootstrapClassOrNull(name) 接口, 让引导类加载器