北京工程建设合同备案网站,杭州租房网站建设,国外网站排行榜,无锡百度推广公司哪家好双亲委派模型 1. 什么是双亲委派模型2. 双亲委派模型的优点 1. 什么是双亲委派模型
提到 类加载 机制#xff0c;不得不提的一个概念就是“双亲委派模型”。
双亲委派模型指的就是 JVM 中的类加载器如何根据类的全限定名找到 .class 文件的过程
类加载器: JVM 里面专门提供… 双亲委派模型 1. 什么是双亲委派模型2. 双亲委派模型的优点 1. 什么是双亲委派模型
提到 类加载 机制不得不提的一个概念就是“双亲委派模型”。
双亲委派模型指的就是 JVM 中的类加载器如何根据类的全限定名找到 .class 文件的过程
类加载器: JVM 里面专门提供的对象, 负责类加载。
.class 文件可能存放的位置有很多有的放 jdk 目录里有的放项目目录里还有的放在其他位置。 所以 JVM 提供了多种类加载器每个类加载器负责一个片区。
站在 Java 虚拟机的角度来看只存在两种不同的类加载器
一种是启动类加载器Bootstrap ClassLoader这个类加载器使用 C 语言实现是虚拟机自身的一部分另外一种就是其他所有的类加载器这些类加载器都由Java语言实现独立存在于虚拟机外部并且全都继承自抽象类 java.lang.ClassLoader。
站在 Java 开发人员的角度来看类加载器就应当划分得更细致一 些。自 JDK 1.2 以来Java 一直保持着三层类加载器、双亲委派的类加载架构器。
如果一个类加载器收到了类加载的请求它首先不会自己去尝试加载这个类而是把这个请求委派给父类加载器去完成。每一个层次的类加载器都是如此因此所有的加载请求最 终都应该传送到最顶层的启动类加载器中只有当父加载器反馈自己无 法完成这个加载请求它的搜索范围中没有找到所需的类时子加载器才会尝试自己去完成加载。 启动类加载器加载 JDK 中 lib 目录中 Java 的核心类标准类库即$JAVA_HOME/lib目录。扩展类加载器。加载 lib/ext 目录下的类扩展类。应用程序类加载器加载我们写的应用程序。自定义类加载器根据自己的需求定制类加载器。
举个栗子 加载 java.lang.String (没有考虑有自定义的类加载器)
程序启动先进入 ApplicationClassLoader 类加载器。ApplicationClassLoader 类加载器会检查父类加载器是否加载过没有则调用父类加载器 ExtensionClassLoader 。ExtensionClassLoader 类加载器检查它的类加载器是否加载过没有则调用父类加载器 BootStrap ClassLoader。BootStrap ClassLoader 发现没有父类加载器所以扫描自己负责的目录。java.lang.String 这个类在标准库中能直接找到所以由 BootStrap ClassLoader 负责后续加载过程查找环节就结束了 要是没找到就让子类加载器进行加载。
2. 双亲委派模型的优点 避免重复加载类比如 A 类和 B 类都有一个父类 C 类那么当 A 启动时就会将 C 类加载起来那么在 B 类进行加载时就不需要在重复加载 C 类了。 安全性使用双亲委派模型也可以保证了 Java 的核心 API 不被篡改如果没有使用双亲委派模型而是每个类加载器加载自己的话就会出现一些问题比如我们编写一个称为 java.lang.Object 类的话那么程序运行的时候系统就会出现多个不同的 Object 类而有些 Object 类又是用户自己提供的因此安全性就不能得到保证了。
注意 自己定义的类加载器可以遵守双亲委派模型也可以不遵守主要是看实际需求。