今天给大家分享JVM系列之双亲委派机制相关的知识。

1、Java类加载的过程

Java类的加载过程是动态的,它不会一次性把程序所有的类全部加载后再运行,而是先保障程序运行的基础类加载到JVM虚拟机当中,其他的类,一般是再需要的时候才会去加载,这样的运行机制也达到了节约内存的目的。

当JVM虚拟机加载某个class文件的时候,采用的是双亲委派模式(任务委派模式),就是将请求交给父类去处理。

2、类装载的方式

隐式装载:程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到JVM中。

显式装载:通过class.forName()等方法,显式加载需要的类

3、双亲委派机制的概念

双亲委派机制是指当一个类加载器收到某个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,它会先委托父类加载器在自己的搜索范围内找不到对应的类时,该类加载器才会尝试自己去加载。

4、双亲委派模式的工作流程

Application ClassLoader 收到一个类加载请求时,首先它自己不会先去尝试加载这个类,而是先将这个加载请求委派给父类加载器Extension ClassLoader去加载。

如果Extension ClassLoader收到一个类加载请求时,先将加载请求委派给父类加载器Bootstrap ClassLoader去完成。

如果Bootstrap ClassLoader加载失败(在<JAVA_HOME>\lib中未找到所需类),就会让Extension ClassLoader尝试加载,如果加载成功了就不再让Extension ClassLoader加载,过程结束。

如果Extension ClassLoader也加载失败,就会使用Application ClassLoader加载如果加载成功了就不再让Application ClassLoader加载,过程结束。

如果Application ClassLoader也加载失败,就会使用自定义加载器去尝试加载。

如果所有的加载都失败了,就会抛出ClassNotFoundException异常。

理解:执行的情况都是由Bootstrap ClassLoader先加载,失败了轮到Extension ClassLoader加载,再失败了轮到Application ClassLoader,最后轮到自定义加载器加载。一般情况下大家写的java程序都是Application ClassLoader进行加载的。

5、双亲委派模型的核心代码

protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{synchronized (getClassLoadingLock(name)) {// 首先,检查这类是否已经被加载过了Class<?> c = findLoadedClass(name);if (c == null) {long t0 = System.nanoTime();try {if (parent != null) {//如果存在父类加载器,则取找该类的父类加载器c = parent.loadClass(name, false);} else {//返回由引导类加载器加载的类;如果未找到,则返回 null。c = findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {// 如果父类加载器抛出ClassNotFoundException异常// 则说明父类加载器无法完成加载请求}if (c == null) {// 在父类加载器无法加载时// 再调用本身的findClass方法来进行加载long t1 = System.nanoTime();c = findClass(name);// 这是定义类加载器;记录统计数据sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}
}

6、双亲委派机制的作用

防止加载同一个class文件。通过委托的方式去询问父级是否已经加载过该class,如果加载过了就不需要重新加载。从而保证了数据安全。

通过委托的方式,保证Java核心class不被篡改,即使被篡改也不会被加载,即使被加载也不会是同一个class对象,因为不同的加载器加载同一个.class也不是同一个Class对象。这样则保证了Class的执行安全。

JVM系列(三):双亲委派机制笔记相关推荐

  1. JVM-白话聊一聊JVM类加载和双亲委派机制源码解析

    文章目录 Java 执行代码的大致流程 类加载loadClass的步骤 类加载器和双亲委派机制 sun.misc.Launcher源码解析 Launcher实例化 Launcher 构造函数 双亲委派 ...

  2. (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器

    引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...

  3. JVM - 彻底理解打破双亲委派机制

    文章目录 Pre 双亲委派 何为打破双亲委派 如何打破双亲委派 演示 重写 ClassLoader#loadClass 失败原因探究 临时解决办法 验证是否成功 应用下新建Boss1类 自定义加载路径 ...

  4. 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

    转载自 深入JVM系列(三)之类加载.类加载器.双亲委派机制与常见问题 一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用 ...

  5. JVM学习笔记之-类加载子系统,类的加载与类的加载过程,双亲委派机制

    一 类加载器与类加载过程 类加载子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识. ClassLoader只负责class文件的加载,至于 ...

  6. JVM学习笔记-03-类加载器及双亲委派机制

    JVM学习笔记-03-类加载器及双亲委派机制 文章目录 JVM学习笔记-03-类加载器及双亲委派机制 1. 类加载器 视频链接-最新JVM教程IDEA版[Java面试速补篇]-03-类加载器及双亲委派 ...

  7. (JVM)双亲委派机制 破坏双亲委派机制

    1. 双亲委派机制 类加载器用来把类加载到Java虚拟机中.从JDK1.2版本开始,类的加载过程采用双亲委派机制,这种机制能更好地保证Java平台的安全. Java 虚拟机对 class 文件采用的是 ...

  8. 彻底弄懂类加载和JVM的双亲委派机制

    类加载 类的生命周期会经历以下 7 个阶段: 加载阶段(Loading) 验证阶段(Verification) 准备阶段(Preparation) 解析阶段(Resolution) 初始化阶段(Ini ...

  9. 【JVM】双亲委派机制详解

    通过上篇文章我们学习了类加载,也提到了因为双亲委派机制的存在自定义类加载器的实现,不要去覆盖ClassIoader类的loadClass方法,去实现findClass方法,接下来详细解释一下双亲委派机 ...

最新文章

  1. 跨域?拒绝说概念(内含demo)
  2. 对话框属性页(VC_MFC)
  3. hdu 2563(递推)
  4. mysql gid_mysql主从复制5.6基于GID及多线程的复制笔记
  5. (五)python3 只需3小时带你轻松入门—— 逻辑运算符
  6. tensorflow去掉某一维度_在Python中解压缩(取消堆栈)一个输入(占位符),在tensorflow中有一个None维度...
  7. oracle授权操作
  8. 2021年5大最佳3D动画软件
  9. 控制系统设计专题(三)——自抗扰控制算法(下)
  10. 6 种常用的项目管理模式
  11. 2022质量员-土建方向-岗位技能(质量员)特种作业证考试题库及模拟考试
  12. 新西兰计算机科学硕士哪所大学最好,2020年新西兰哪些大学计算机科学专业比较好及其优势介绍...
  13. 微信小程序系列(7)如何用微信小程序写一个论坛?贴心代码详解(五)删帖页【完结篇】
  14. Echarts之饼图制作
  15. linux5关闭apic服务,Linux中断 - APIC
  16. 知识图谱和图神经网络
  17. 深度学习attention机制中的Q,K,V分别是从哪来的?
  18. 身体和灵魂,总得有一个在路上
  19. 早鸟倒计时:Linux的任督二脉之《内存管理》在线视频
  20. 面向对象----自有属性和共有属性

热门文章

  1. 基于JSP的公寓租赁系统
  2. 恒压供水(3托3) 功能: 三拖三(3台变频3台水泵)
  3. 开心截图让梦想照进现实
  4. 牛客网在线编程专题《剑指offer-面试题33》把数组排成最小的数
  5. 工商报表企业性质划分标准(工作中用)
  6. 蓝桥杯-----世纪末的星期
  7. linux ubuntu联网设置方法,Ubuntu系统无线网络连接设置方法
  8. 安装Visdom报错,FileNotFoundError: [WinError 3] 系统找不到指定的路径。:‘C:\\Users\\卡徒/.visdom/‘
  9. 【中国善网】ESG周报:小鹏汽车发布ESG报告,领跑国产运动品牌
  10. 计算机毕业设计Java永川区自行车在线租赁管理系统(系统+程序+mysql数据库+Lw文档)