ClassLoader的双亲委派模型
类加载器用以实现类加载功能,并且确定被加载的类在Java虚拟机中的唯一性。
注意:由同一个类加载器加载,则这两个类相等,由不同的类加载器加载,则这两个类不相等。
我们知道类加载器主要分为:
- 启动类加载器
- 扩展类加载器
- 应用程序类加载器
启动类加载器
负责加载以下类:
- 存放在JAVA_HOME\lib目录中的类;
- 被-Xbootclasspath参数所指定路径中、并且是被虚拟机识别的类库。
注意:启动类加载器不能直接被java程序直接饮用。
扩展类加载器
负责加载以下类:
- JAVA_HOME\lib\ext目录中的类;
- 被java.ext.dirs系统变量所指定的路径中的所有类。
注意:开发者可以直接使用扩展类加载器。
应用程序类加载器
负责加载用户类路径(classpath)上所指定的类库。
注意:该类加载器也被称为系统类加载器,开发者可以直接使用该类加载器。若开发者没有自定义类加载器,程序默认使用该类加载器。
各种类加载器并不是孤立的,而是互相配合使用。
在java虚拟机中,各种类加载器配合使用的模型就是双亲委派模型。
双亲委派模型
双亲委派模型的工作流程全部在ClassLoader的loadClass()方法中执行:
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { Class<?> c = findLoadedClass(name); // 检查需要加载的类是否已经被加载过if (c == null) { try { // 若没有加载,则调用父加载器的loadClass()方法if (parent != null) { c = parent.loadClass(name, false); }else{ // 若父类加载器为空,则默认使用启动类加载器作为父加载器c=findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // 若父类加载器加载失败会抛出ClassNotFoundException, //说明父类加载器无法完成加载请求 } if(c==null){ // 在父类加载器无法加载时 // 再调用本身的findClass方法进行类加载 c=findClass(name); } } if(resolve){ resolveClass(c); } return c;
}
复制代码
若一个类加载器收到了类加载请求:
步骤:
- 把该类加载请求委派给父加载器父完成,而不是自己去加载;(每层的类加载器都是如此,因此所有的类加载请求最终都会交由启动类加载器去加载)
- 只用当父类加载器反馈自己无法完成该加载请求时,自加载器才会自己加载。
优点:
Java类随着它的类加载器一起具备了一种带优先级的层次关系。
ClassLoader的双亲委派模型相关推荐
- java 类加载 双亲委派_java类加载器和双亲委派模型
一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class文件加载所需的类,主要场景用于热部署.代码热替换等场景. 系统提供3种的类加载器:Bootstrap ClassLoad ...
- 分析JVM双亲委派模型的类加载源码 自定义类加载器
双亲委派模型下,在父类加载器无法加载的情况下再由当前类加载器去加载.具体的实现逻辑在java.util.ClassLoader抽象类的loadClass方法中.在该方法中,先检查是否已经加载过,如果没 ...
- java 打破双亲委派,为什么说java spi破坏双亲委派模型?
虽然有SPI破坏双亲委派模型的说法,但我不太认同.简单说下. 双亲委派模型(再次吐槽下这个翻译),是一种加载类的约定.这个约定的一个用处是保证安全.比如说你写Java用了String类,你怎么保证你用 ...
- jvm:类加载器与双亲委派模型
两个类相等需要类本身相等,并且使用同一个类加载器进行加载.这是因为每一个类加载器都拥有一个独立的类名称空间. 这里的相等,包括类的 Class 对象的 equals() 方法.isAssignable ...
- amba simple class驱动_学习笔记:class加载器和双亲委派模型
类加载器 类加载器有四种 启动类加载器(Bootstrap ClassLoader) 负责加载 JAVA_HOMElib ⽬录中的,或通过-Xbootclasspath参数指定路径中的且被虚拟机认可( ...
- 面向对象回顾(静态变量、类加载机制/双亲委派模型、Object类的方法、类和对象区别)
1. 静态变量存在什么位置? 方法区 2. 类加载机制,双亲委派模型,好处是什么? 某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务, ...
- 类加载器、双亲委派模型
目录 1.简介 2.类和类加载器 3.双亲委派模型 3.1 启动类加载器: 3.2 扩展类加载器 3.3应用程序类加载器 3.4 类加载器的双亲委派模型(Parents Delegation Mod ...
- Java虚拟机:对象创建过程与类加载机制、双亲委派模型
一.对象的创建过程: 1.对象的创建过程: 对象的创建过程一般是从 new 指令(JVM层面)开始的,整个创建过程如下: (1)首先检查 new 指令的参数是否能在常量池中定位到一个类的符号引用: ( ...
- 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器
28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...
最新文章
- 生信分析-PS修改坐标
- wordpress自动批量定时发布插件 DX-auto-publish
- 获取文件夹所占空间的大小
- JavaFX中基于表达式的PathTransitions
- 西南科技大学研究生计算机,我们毕业啦……西南科技大学2020研究生毕业记!...
- C++ primer 11章关联容器
- c语言RTK算法,C-RTK 9P定位系统
- XMLHttpRequest.overrideMimeType()
- 无法执行任何java命令,报错OutOfMemoryError: Cannot create GC thread. Out of system resources
- 海康相机SDK+halcon17(64位)+MFC+VS(64位)联合开发遇到的问题(在使用GenImage3Extern将RGB数据转换为halcon图像时出现异常情况处理)
- C语言学生成绩排名系统
- (王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征
- java实现同步的5种方式
- php死循浏览器卡死,Win10 Edge浏览器假死解决方案
- 简易网页版进程管理器(支持手机管理电脑进程)
- java i18n utf_Java国际化(i18n)字符串与Unicode转换
- 微信小程序接口实现加密
- css案例2——黑白滤镜
- 计算机图形学必备的数学知识
- 字符串(一) | 剑指 Offer 58 - II. 左旋转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词
热门文章
- 【学习笔记】Android视图动画学习
- 汇编语言 寄存器 2.9~2.12 总结
- PHP远程DoS漏洞深入分析及防护方案
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)...
- 浅析枚举类型(Enumerated types)
- Windows2003 IIS安装
- ORACLE同步数据库之,自动生成sequence 文件
- Linux多线程实践(一)线程基本概念和理论
- 设计模式-组合+策略模式
- 自制MVC之工具类插件一