java双亲委派机制

116 阅读1分钟

了解双亲委派机制前,先了解java的类加载器有哪些,java为我们提供3种类加载器。

1.启动类加载器

作用:负责加载 `JAVA_HOME/lib` 目录中的类库。

2.扩展类加载器

作用:负责加载 `JAVA_HOME/lib/ext` 目录中的类库。

3.应用类加载器

作用:负责加载用户路径(CLASSPATH)上的类库。

除了上述3种加载器,我们也可以自定义类加载器,继承java.lang.Classloader即可

关系如下。

启动类加载器->扩展类加载器->应用类加载器-自定义加载器 从左往右(由父到子)。

图解

image-20220217160213598.png 选取类加载流程

image.png 步骤:

  1. 自定义加载类挂载到应用程序类加载。
  2. 应用程序类加载器将类加载请求委托给扩展类加载器。
  3. 扩展类加载器将类加载请求委托给启动类加载器。
  4. 启动类加载器在加载路径下查找并加载Class文件,如果未找到目标Class文件,则交由扩展类加载器加载。
  5. 扩展类加载器在加载路径下查找并加载Class文件,如果未找到目标Class文件,则交由应用程序类加载器加载。
  6. 应用程序类加载器在加载路径下查找并加载Class文件,如果未找到目标Class文件,则交由自定义加载器加载。
  7. 在自定义加载器下查找并加载用户指定目录下的Class文件,如果在自定义加载路径下未找到目标Class文件,则抛出ClassNotFoud异常。 解决了什么问题

    保证了jvm中类唯一,只被加载一次。