类加载器以及类加载的双亲委派模型

JVM的类加载器,以及双亲委派模型都是什么? 反之,如果没有使用双亲委派模型,都由各个类加载器自行去加载的话,如果用户自己也编写了一个名为java.lang.Object的类,并放在程序的ClassPath中,那系统中就会出现多个不同的Object类,Java类型体系中最基础的行为也就无从保证,应用程序将会变得一片混乱。例如类java.lang.Object,它存放在rt.jar之中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都能够保证是同一个类。 阅读详情

类加载

加载的作用

加载的作用就是将 .class文件加载到内存。

类加载过程

类加载过程:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。
在这里插入图片描述

我们可以在类的加载阶段通过自定义类加载器去控制字节流的获取方式(重写一个类加载器的 loadClass() 方法)。

注意数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。


JVM 中内置的三个ClassLoader

  1. BootstrapClassLoader(启动类加载器) :最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的jar包和类或者或被 -Xbootclasspath参数指定的路径中的所有类。
  2. ExtensionClassLoader(扩展类加载器) :主要负责加载目录 %JRE_HOME%/lib/ext
    目录下的jar包和类,或被 java.ext.dirs 系统变量所指定的路径下的jar包。
  3. AppClassLoader(应用程序类加载器) :面向我们用户的加载器,负责加载当前应用classpath下的所有jar包和类。

类加载的双亲委派模型

什么是双亲委派模型?

在了解双亲委派模型之前,我们需要了解ClassLoader之间的父子关系:
在这里插入图片描述
注意:类加载器之间的“父子”关系也不是通过继承来体现的,是由“优先级”来决定

类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。

加载的时候,首先会把该请求委派该父类加载器的 loadClass() 处理,因此所有的请求最终都应该传送到顶层的启动类加载器 BootstrapClassLoader 中。当父类加载器无法处理(因为每个类都有自己加载class的范围,所以会存在加载不到,比如说我们自己写的一个类在没有指定用BootstrapClassLoader 时,BootstrapClassLoader 是加载不到的)时,才由自己来处理。

当父类加载器为null时(null并不代表ExtensionClassLoader没有父类加载器,而是 BootstrapClassLoader),会使用启动类加载器 BootstrapClassLoader 作为父类加载器。

在这里插入图片描述

为什么需要使用双亲委派模型

双亲委派模型可以避免类的重复加载(JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 java.lang.Object类的话,那么程序运行的时候,系统就会出现多个不同的 Object 类。

手把手教你用Boot-Repair快速修复Ubuntu启动分区缺失(附详细命令行步骤) 本文详细介绍了如何使用Boot-Repair工具快速修复Ubuntu启动分区缺失问题,包括诊断、应急准备、自动修复和手动命令操作。通过grub rescue模式下的关键命令和Boot-Repair的图形界面操作,帮助用户高效解决启动分区故障,确保系统恢复正常运行。 阅读详情

相关推荐

robomimic实验复现全流程:从数据集下载到训练视频生成

本文详细介绍了机器人模仿学习项目RoboMimic的完整实验复现流程。内容涵盖从使用Conda创建Python 3.8隔离环境、安装RoboSuite仿真器和MuJoCo物理引擎,到下载并探索数据集、配置与启动模型训练,最后进行模型评估和生成策略执行视频。该指南旨在帮助研究者和开发者高效搭建实战环境,规避常见问题,快速验证算法或应用于实际场景。

weixin_29089057的博客 518

关于什么是双亲委派模型的详细解析?

双亲委派模型是和 Java 中多个类加载器(启动类加载器、扩展加载器、应用程序类加载器)的运行规则,通过这个(双亲委派模型)规则可以避免类的非安全问题和类被重复加载的问题,但它也遇到了一些问题,比如 JNDI 和 JDBC 不能通过这个规则进行加载,它需要通过打破双亲委派的模型的方式来加载。

2301_76607156的博客 476

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。

qq_44681809的博客 1万+

双亲委派机制的原理及好处

【双亲委派机制的原理及好处】

学无止境 3012

从零开始的 AI Infra 学习之路

AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。

AI Infra / LLM / 软件开发 3万+

FlashBootloader01-基于UDS的Flash Bootloader【架构篇】

文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端

3589

类加载器详解(重点)之双亲委派

类加载器详解(重点)之双亲委派

weixin_42491646的博客 865

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 244

类加载机制与双亲委派

类加载:虚拟机将描述类的数据从class文件加载到内存中,对加载的数据进行验证,准备,解析,初始化;最后得到虚拟机认可后转化成直接可以使用的java类型的过程 1、类加载机制 加载 通过一个类的全限定类名来获取定义此类的二进制字节流 将这个字节流所代表的静态存储结构转化成方法区的运行时数据结构 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口 验证(文件格式,元数据,字节码,符号引用等校验) 确保Clas...

SebastianTang的博客 229

GEE:连续变化检测 CCDC 提取断点信息(干扰时间、干扰幅度、干扰次数)

本文将介绍在 Google Earth Engine (GEE) 平台上连续变化检测与分类(Continuous Change Detection and Classification, CCDC)提取扰动时间、干扰幅度、干扰次数信息,并下载到本地的代码。

养乐多的博客 1945

从零实现深度学习框架——理解正则化(一)

本文介绍解决过拟合与欠拟合的方法——正则化,主要介绍L1和L2正则化。

日积月累,天道酬勤 3394

Java面试--JVM类加载

面试题:JVM类加载机制(阿里面试题) 面试题:类加载器的双亲委派模型的作用,能重复加载某个类吗(阿里面试题) 一、JVM 类加载机制详解 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化: 加载 加载过程主要完成三件事情: 1、通过类的全限定名来获取定义此类的二进制字节流 2、将这个类字节流代表的静态存储结构转为方法区的运行时数据结构 在堆中生成一个代...

小刺猬 3942

akamai3简单分析

akamai流程的简单分析

记录一些web逆向的过程 916

【JVM】类加载器和双亲委派模型

开始介绍类加载器和双亲委派模型之前,简单回顾一下类加载过程。Class。

2202_75481735的博客 1429

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

类加载器与双亲委派模型

而JasperLoader的加载范围仅仅是这个JSP文件所编译出来的那一个.Class文件,它出现的目的就是为了被丢弃:当Web容器检测到JSP文件被修改时,会替换掉目前的JasperLoader的实例,并通过再建立一个新的Jsp类加载器来实现JSP文件的HotSwap功能。其他类型的加载器都由自己的父类加载器加载。类加载器作用在类加载阶段。类加载阶段中实现“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作的代码模块成为“类加载器”。作用:为了实现父类加载器使用子类加载器加载指定的类。

王飞的博客 1065

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java类加载器之双亲委派模型

从 Java 虚拟机的角度来讲, 只存在两种不同的类加载器: 一种是启动类加载器 (Bootstrap ClassLoader), 这个类加载器使用C++ 语言实现气是虚拟机自身的一部分; 另一 种就是所有其他的类加载器, 这些类加载器都由 Java语言实现 , 独立于虚拟机外部, 并且全都继承自抽象类java.lang.ClassLoader。从Java开发人员的角度来看,类加载器...

LMR的博客 9468

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度解析JVM类加载器与双亲委派模型

Java虚拟机(JVM)是Java程序运行的核心,其中类加载器和双亲委派模型是JVM的重要组成部分。本文将深入讨论这两个概念,并解释它们在实际开发中的应用。类加载器是JVM的一部分,负责加载Java类的字节码文件。Java应用程序中的每个类都必须由类加载器加载,类加载器将类的字节码文件从磁盘或网络加载到内存中,并在JVM中创建一个对应的Class对象。双亲委派模型是一种类加载器之间的层次结构,它通过父类加载器委派给子类加载器加载类。

weixin_43268715的博客 2381

Java的类加载器与双亲委派模型详解

Java的双亲委派模型以及类加载器介绍

愿你我都能实现自己的梦想 1433

类加载器双亲委派模型

类加载器双亲委派模型是Java类加载器的一种工作机制。它基于一种层次化的类加载器结构,通过委派的方式实现类的加载和查找。在这个模型中,每个类加载器都有一个父类加载器,当一个类加载器需要加载一个类时,它首先将加载请求委派给父类加载器,只有当父类加载器无法完成加载任务时,才由当前类加载器自己去加载。类加载器双亲委派模型是Java类加载器的一种工作机制,通过委派的方式实现类的加载和查找。它通过隔离命名空间、提高安全性和鼓励代码复用等方式,为Java程序提供了良好的类加载机制。

果酱 の 博客 3308

Java类加载器(双亲委派模型)(综述)

文章目录类加载器一、预定义类型类加载器二、类加载器结构双亲委派模型一、双亲委派模型流程二、双亲委派模型源码自定义类加载器一、类加载器继承关系二、ClassLoader1、构造函数2、核心方法三、自定义类加载器实例四、双亲委托模型的破坏1、第一次破坏2、第二次破坏3、第三次破坏引用 类加载器 一、预定义类型类加载器 1、启动(Bootstrap)类加载器,负责将 <Java_Runtime_H...

洛豳枭薰 7425

Tomcat 类加载器之为何违背双亲委派模型

1. 什么是类加载机制? 代码编译的结果从本地机器码转变成字节码,是存储格式的一小步,却是编程语言发展的一大步。Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以呗虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以...

dangwanma6489的博客 5830

类加载器、双亲委派模型

目录 应用程序类加载器 (系统类加载器) AppClassLoader 扩展类加载器 Extension ClassLoader 引导/启动类加载器 Bootstrap ClassLoader 双亲委派模型 一般来说java有着三层类加载器、双亲委派的类加载架构,今天我们来介绍一下是哪三层类加载器。 我们自定义一个类,然后通过类。class.getClassLoader查看我们自定类的类加载器,可以发现结果是AppClassLoader,然后我们......

peinanwei__的博客 756

说说类加载器双亲委派模型

Java 中的类加载器按照层次结构组织,每个类加载器都有一个父类加载器(除了 Bootstrap ClassLoader)。双亲委派模型通过委托父类加载器加载类,确保类的唯一性和安全性,是 Java 类加载器的核心工作机制。当一个类加载器收到加载类的请求时,首先委托父类加载器尝试加载。:在模块化系统中,不同的模块可能需要使用不同的类加载器加载类。如果所有父类加载器都无法加载该类,则由当前类加载器尝试加载。如果类未被加载,类加载器将加载请求委托给父类加载器。如果父类加载器无法加载,则由自己加载。

完全体 1175

类加载器 - 双亲委派模型

学习与思考Java类加载中的双亲委派模型,加入一些源码分析,demo编码

蒋大钊的博客 575

Java类加载器—(详解 类加载时机,类加载过程,类加载器分类以及双亲委派模型)

如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。将类的二进制数据流中的符号引用替换为直接引用(本类中如果用到了其他类,此时就需要找到对应的类)类加载的过程: 加载、验证、准备、解析、初始化。类加载时机:(到了就加载,不用不加载)

Java技术加油站的博客 1398

【深入理解java虚拟机】 - 类加载器与双亲委派模型

Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”。类加载器用于实现类的加载动作,对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。隔离加载类修改类加载的方式扩展加载源防止源码泄漏。......

1+1=王的博客 6161
上一篇: 线程池ThreadPoolExecutor类
下一篇: 周期性线程池Executors.newScheduledThreadPool
村口老师傅
博客等级 码龄9年 67粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值