理解类加载的双亲委派模型

作者: gaopq | 来源:发表于2020-04-09 10:07 被阅读0次

类加载器

  • 启动类加载器 BootstrapClassLoader
  • 扩展类加载器 ExtensionClassLoader
  • 系统类加载器(应用程序类加载器) AppClassLoader

Java API doc 表述

The Java platform uses a delegation model for loading classes. The basic idea is that every class loader has a "parent" class loader. When loading a class, a class loader first "delegates" the search for the class to its parent class loader before attempting to find the class itself.

思考理解

  • 只有当父加载器在自己搜索范围内找不到特定的类时(即ClassNotFoundException), 子加载器才会尝试自己去加载

  • 双亲委派中的"双"并不特指父亲母亲, 而是泛指父辈, 即父类加载器(是不是叫父类/基类委派更贴切?或者干脆叫啃老委派?)

  • 设计缘由:

    • 避免类的重复加载, Java类随着它的类加载器一起具备了一种带有优先级的层次关系, 对于已被父加载器加载过的类, 子加载器没必要重新加载一次

    • 安全性, 最基础的类一定是由最上层的类加载器实现加载的, 不允许用户使用自定义加载器在加载基础类的时候扩展自定义的操作

  • 破坏双亲委派模型

    • SPI(Service Provider Interface) 接口是Java核心库的一部分, 是由启动类加载器来加载的, 提供"为某个接口寻找服务实现的机制"

    • 而SPI的实现是由各供应厂商来完成, 实现类是由系统类加载器来加载的, 按双亲委派模型, 启动类加载器无法委派系统类加载器去加载类

    • 线程上下文类加载器(Context class loader, JDK1.2), Java应用的线程上下文加载器默认就是系统类加载器AppClassLoader, 可通过 Thread 的 setContextClassLoader 方法设置线程的上下文类加载器

    • 案例: JDBC驱动注册

资料参考

相关文章

  • Java 类加载

    双亲委派模型 并非强制 而是推荐 SPI 父类加载器需要子类加载器加载类 打破双亲委派模型 https://www...

  • java类加载破坏双亲委派模型

    前面java类加载器与双亲委派模型中提到Java采用个双亲委派的方式来完成类加载,但是双亲委派模型并不是一个强制的...

  • 类加载机制 双亲委派模型

    双亲委派模型 模型如下图: 双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器 当一个类收到了类加载请...

  • ClassLoader重点梳理

    类加载器 对类加载器的学习重点要掌握以下几点: 双亲委派模型的概念 双亲委派模型的实现原理 类加载器的工作原理 如...

  • 要点提炼| 理解JVM之类加载机制

    本篇将了解类加载机制和双亲委派模型这两大知识考点: 概述 类加载全过程 类加载器&双亲委派模型 1.概述 a.JV...

  • Tomcat类载入器

    大家都知道,Java的类加载机制是双亲委派模型,那么什么是双亲委派模型呢?我们这里简要的说一下,双亲委派模型...

  • 双亲委派模型

    一、什么是双亲委派模型 约定: 双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应有自己的父亲加载器(但...

  • Java虚拟机

    JVM 组成部分 类加载器 执行引擎 内存区 本地方法调用 类加载器 双亲委派模型 类的加载过程采用双亲委派机制,...

  • 类加载器与双亲委派模型

    1. 双亲委派模型 1.1 什么是双亲委派模型 首先,先要知道什么是类的加载器。简单说,类加载器就是根据指定全限定...

  • JVM系列(九):Java类加载机制之双亲委派模型

    前言 双亲委派模型是Java加载类的机制.采用双亲委派模型的好处是Java类随着它的类加载器一起具备了一种带有优先...

网友评论

    本文标题:理解类加载的双亲委派模型

    本文链接:https://www.haomeiwen.com/subject/eveqmhtx.html