双亲委派模型

双亲委派模型

  • .
  • JVM自带的三个类加载器
  • 什么是双亲委派模型?
  • 双亲委派模型的优点

.

双亲委派模型_第1张图片

JVM自带的三个类加载器

BootstrapClassLoader负责加载标准库中的类,Java有一个标准文档,描述了都要提供哪些类

ExtensionClassLoader负责加载JVM扩展的库,除了标准库之外,实现JVM的厂商,可能还会添加一些类

ApplicationClassLoader负责加载第三方库,包括自己写的类
从上往下依次为父子关系,但是此处的父子并非父类和子类继承的关系,可以看作子类加载器里有一个引用指向了父类的加载器

什么是双亲委派模型?

JVM中加载了.class文件的时候,需要用到类加载器模块
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最 终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无 法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载.如果找到了,就会进行后续加载,如果没找到,就会抛出一个异常

双亲委派模型的优点

  1. 避免重复加载类:比如 A 类和 B 类都有一个父类 C 类,那么当 A 启动时就会将 C 类加载起来,那么在 B 类进行加载时就不需要在重复加载 C 类了。
  2. 安全性:使用双亲委派模型也可以保证了 Java 的核心 API 不被篡改,如果没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 java.lang.Object类的话,那么程序运行的时候,系统就会出现多个不同的 Object 类,而有些 Object 类又是用户自己提供的因此安全性就不能得到保证了。

你可能感兴趣的:(spring,java,后端)