jvm 类加载过程 双亲委派流程

JVM类加载过程-Loading 当使用子级类加载器去加载时,如果找不到该类,会委托父级类加载器去加载该类,也就是CustomClassLoader找不到类时,会委托AppClassLoader去加载,再找不到,再委托ExtensionClassLoader去加载,再找不到,再委托给Bootstrap类加载器去加载;比如:当程序员自定义一个与JDK相同的类,并在里面进行一系列不安全操作,再把该类进行打包放置在JDK对应的包内,使用Bootstrap类加载器进行加载,覆盖JDK自带的类,会造成比较严重的安全问题; 阅读详情

JVM(Java Virtual Machine,Java虚拟机)的类加载过程包括三个主要阶段:加载(Load)、链接(Link)和初始化(Initialize)。其中,链接阶段又可以细分为验证(Verify)、准备(Prepare)、解析(Resolve)三个子阶段。而双亲委派模型是类加载机制中的一部分,用于确保Java核心API的稳定性和安全性。

双亲委派模型:当一个类收到了类加载请求时,它不会自己直接去加载,而是把这个请求委派给父类的加载器去执行,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。只有当父类加载器无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。

双亲委派模型的工作流程如下:

  1. 加载:加载阶段是类加载过程的第一个阶段。在这个阶段,JVM需要找到类的二进制数据,并按照JVM规范要求的格式存储在方法区中。当程序需要使用某个类时,JVM首先会检查这个类的字节码文件是否已经被加载过,如果尚未加载,系统会根据类名,按照一定的路径(CLASSPATH)规则,在文件系统或网络中查找对应的类的字节码文件并加载。
  2. 验证:验证阶段是为了确保被加载的类文件信息符合JVM规范,没有安全方面的问题。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证。
  3. 准备:准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。此时,该变量是一个数据类型默认的零值。
  4. 解析:解析阶段是JVM将符号引用转换为直接引用的过程。符号引用就是一组符号来描述目标,可以是任何字面量。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。
  5. 初始化:初始化阶段是执行类构造器方法(())的过程。此方法由编译器自动收集类中的所有类变量的赋值动作和静态代码块集合来的。

在整个类加载过程中,双亲委派模型确保了Java核心API的稳定性和安全性。因为所有的类加载请求都会被传送到顶层的启动类加载器中,这就保证了Java核心API的类始终是由官方提供的版本加载,而不是被用户或其他代码所替换。同时,双亲委派模型也减少了系统的开销,因为每个类只会被加载一次,避免了类的重复加载。

01-从JDK源码级别彻底剖析JVM类加载机制 自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。try {//defineClass将一个字节数组转为Class对象,这个字节数组是class文件读取后最终的字节数组。 阅读详情

相关推荐

VisionPro 9.0 QuickBuild里用C#脚本调用Halcon 23.11模型,保姆级图文配置流程

本文详细介绍了如何在VisionPro 9.0 QuickBuild环境中使用C#脚本调用Halcon 23.11深度学习模型,提供从环境配置到模型集成的保姆级图文教程。重点解决图像格式转换、许可证配置等工业视觉检测中的常见问题,帮助开发者快速实现高效、稳定的视觉检测流水线部署。

weixin_27027459的博客 432

深入解析JVM:双亲委派机制的原理与实践

双亲委派模型可以保证同一个类只会被同一个类加载器加载。JVM双亲委派机制是Java类加载器的一种工作机制,它的核心思想是:当一个类加载器收到类加载请求时,首先将这个请求委托给父类加载器去完成,依次递归下去,如果父类加载器可以完成该加载任务,就成功返回;只有父类加载器无法完成此加载请求时(找不到此类),子加载器才会尝试自己去加载。

爱媳妇儿爱编程 8965

AS5600磁编码器选型与安装避坑指南:磁铁形状、间隙距离到底怎么选?(附实测数据)

本文详细解析了AS5600磁编码器的选型与安装要点,包括磁铁形状、间隙距离等关键参数的选择,并附有实测数据支持。特别针对Arduino和I2C接口的应用场景,提供了硬件选型和机械安装的实用指南,帮助开发者避免常见陷阱,提升系统精度和稳定性。

weixin_27038245的博客 287

JVM双亲委派机制执行流程图

1.双亲委派机制 双亲委派机制,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己才想办法去完成。 通俗的讲,就是 某个特定的类加载器在接到加载.

HaleyTiger的博客 704

5G NR 帧结构

本节主要介绍5G NR中的帧结构[38.211-4.3]。5G帧结构(Frame Structure)为时域结构。其设计比其4G LTE更为灵活,这种灵活性使5G能够根据应用需求(如增强移动宽带eMBB,超高可靠低时延通信URLLC)进行调整,同时支持差异化的应用场景,提高了5G的利用效率与响应能力。具体而言,5G帧结构是基于时隙和OFDM符号设计的,且5G网络能够根据服务需求动态调整各时隙持续时长。

夫子喵的博客 5286

基于立创EDA的IP5389BZ+IP6829 100W有线15W无线带屏充电宝DIY全流程解析

本文详细解析了基于立创EDA平台,采用IP5389BZ和IP6829芯片DIY一款100W有线快充、15W无线充电并带显示屏的移动电源的全过程。内容涵盖核心功能规划、硬件选型、电路设计、PCB布局、焊接组装、分步调试以及软件逻辑,为电子爱好者提供了一份从原理到实践的完整指南,并重点强调了电池安全与IP6829供电电压等关键注意事项。

weixin_34374684的博客 304

双亲委派模型过程

双亲委派模型过程:某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。 比喻:员工需要的需要先等高管选择,高管需要的需要先等老板选择,如果老板不要了,再轮到高管选择,如果高管也不需要,则可以由员工来选择。 **使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一...

乐乐的博客 424

Avalonia v11实战:手把手教你从零创建第一个跨平台桌面App(含设计器不显示的解决方案)

本文详细介绍了如何使用Avalonia v11从零开始创建跨平台桌面应用,包括环境准备、项目创建、界面设计及常见问题解决方案。特别针对设计器不显示等常见问题提供了实用解决方法,帮助.NET开发者快速掌握这一强大的UI框架,实现Windows、macOS和Linux多平台应用开发。

weixin_30417487的博客 163

双亲委派模型的工作过程

双亲委派模型的工作过程 父类加载器 类加载请求 子类加载器

像风一样奔跑 1125

LIS3DHTR三轴加速度计Arduino驱动与嵌入式集成指南

加速度计是嵌入式系统中实现运动感知、姿态解算和振动分析的核心传感器。其工作原理基于MEMS微机械结构在惯性力作用下的电容变化,经片内ADC转换为数字信号;I²C接口因其硬件资源占用少、布线简洁,成为低功耗物联网节点的主流通信方式。技术价值体现在高分辨率(12位)、多量程(±2g~±16g)与低功耗(待机电流仅2µA)的平衡,支撑电池供电设备长期运行。典型应用场景包括可穿戴设备的姿态识别、工业预测性维护中的振动监测,以及智能硬件的敲击/跌落检测。本文围绕LIS3DHTR芯片及其Grove模块,详解Arduin

weixin_42584758的博客 593

Qt Installer Framework 简单使用

qt installer framework 简单使用

qq_42815643的博客 2574

JVM的工作流程

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父 类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最 终都应该传送到最顶层的启 动类加载器中,只有当父加载器反馈自己无 法完成这个加载请求(它的搜索范围中没有找到所需的类) 时,子加载器才会尝试自己去完成加载。方法区的作用:用来存储被虚拟机加载的类信息、常量、静态变量(static)、即时编译器编译后的代码等数据 的。程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。

qq_61576108的博客 2477

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

《Vue3+OpenLayers实现多边形绘制与区域处理》摘要:本文介绍如何基于Vue3+OpenLayers+ol-ext实现地图多边形交互功能。核心功能包括:鼠标绘制任意多边形、拖动顶点编辑边界、遮罩显示(非选区变红)、选区剪切显示及功能重置。技术方案采用OpenLayers处理地图渲染,ol-ext实现高级遮罩/剪切效果,ElementPlus提供UI控件。该方案适用于城市规划、园区展示等需要区域标记的场景,完整代码展示了从初始化、绘制、编辑到特效处理的全流程实现。

小彭的博客 958

深入理解JVM:类加载器

一、类加载器 把类加载阶段中通过一个类的全限定类名来获取描述此类的二进制字节流这个动作放到jvm外部实现,实现这个动作的代码模块称“类加载器”。 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在jvm中唯一性。也就是说,如果加载一个类的类加载器不同,那么这两个类在jvm中也是不同的。 三种类加载器 JVM 中内置了三个重要的 ClassLoader,除了 BootstrapC...

Zystem 244

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JAVA进阶之路JVM-2:类加载机制,类的生命周期,类加载过程,类加载时机,类加载器,双亲委派模型,对象创建过程

JVM类加载机制

HakerDONG的博客 1397

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大白话谈JVM的类加载机制(1)

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。很多人担心学了容易忘,这里教你一个方法,那就是重复学习。打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

Z70czd的博客 276

【JVM】深入理解 JVM 类加载器

除启动类加载器外,所有类加载器都有一个父加载器;当需要加载一个类时,当前类加载器会先将请求委派给父加载器,只有父加载器无法加载时,才尝试自己加载。这里的 “双亲” 并非指两个父加载器,而是层级委派关系(更准确地说应称为 “单亲委派”)。类加载器之间的父子关系通过组合而非继承实现(类通过parent字段持有父加载器引用)。JVM 允许开发者通过继承类实现自定义类加载器,以满足特殊需求(如加密字节码、从网络加载类等)。// 类加载路径@Overridetry {// 1. 读取字节码文件。

m0_61057201的博客 924

Java 类加载器与双亲委派机制

类加载器和双亲委派机制 类加载器种类: 1、引导类加载器: 负责加载支持JVM运行位于JRE lib目录下的核心库,比如 rt.jar、charsets.jar 等 c++ 语言在启动 java 虚拟机的时候,用 c++语言实现的引导类加载器,用来加载 jdk 最重要的核心 jar 包 2、 扩展类加载器: 负责加载支持JVM运行位于JRE 目录下ext扩展目录中的 jar 类包 3、 应用程序类加载器:负责加载ClassPath路径下的类包,主要程序员自己编写的那些类) 4、自定义加载器:负责用户自定

不负年华 1352

【JVM】双亲委派机制&类加载器

BootstrapClassLoader(启动类加载器):最顶层的加载类,由 C++实现,通常表示为 null,并且没有父级,主要用来加载 JDK 内部的核心类库( %JAVA_HOME%/lib目录下的 rt.jar 、resources.jar 、charsets.jar等 jar 包和类)以及被 -Xbootclasspath参数指定的路径下的所有类。ExtensionClassLoader(扩展类加载器)

Blue_Pepsi_Cola的博客 1478

【JVM】第二章 JVM类加载、JVM对象

JVM类加载、JVM对象

2022年毕业的萌新程序猿,输出一下自己的学习内容~ 469

根据jvm源码剖析类加载机制

本文剖析了JVM类加载机制的核心流程和实现原理。首先描述了从执行java命令到创建JVM、初始化类加载器的完整启动过程,重点分析了Bootstrap、ExtClassLoader和AppClassLoader三级类加载器的创建与层级关系。其次详细解析了类加载的七个阶段:加载、校验、准备、解析、初始化、使用和卸载,并阐述了每个阶段的关键操作。通过代码示例展示了不同类加载器的加载路径及双亲委派机制的具体实现,包括其安全防护和避免重复加载的设计目的。最后说明如何通过继承ClassLoader并重写findClas

qq_45043381的博客 1121

Java虚拟机学习总结之JVM类加载机制、类加载器、双亲委派机制

一.原理 上一节说到了JVM的内存结构。JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。 二.具体过程 1.加载 官方描述:加载阶段是类加载过程的第一个阶段。在这个阶段,JVM 的主要目的是将字节码从各个位置(...

atomatom98的博客 289

【JVM】——JVM运行机制、类加载机制、内存划分

JVM运行机制,堆栈,程序计数器,元数据区,JVM加载机制,双亲委派模型

阿华的博客 1299

JVM 系列(二) --- JVM 类加载的基本流程

JVM 的基本流程

Fug_Lee的博客 2599

JVM 类加载 详解

JVM 类加载 详解

T_Y_F_的博客 1309

JVM学习笔记---类加载和双亲委派机制

JVM学习笔记—双亲委派机制深究 面试常见: 请你谈谈你对JVM的理解? java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError? 怎么分析? JVM的常用调优参数有哪些? 内存快照如何抓取?怎么分析Dump文件? 谈谈JVM中,类加载器你的认识? 1.JVM的位置 三种JVM: Sun公司:HotSpot 用的最多 BEA:JRockit IBM:J9VM 我们学习都是:HotSpot 2.JVM的体系结构 jvm调优:99%都是在方法区和堆,大部

AmbitionMM的博客 347
上一篇: spring 启动流程 bean生命周期 循环依赖问题
下一篇: java voliate原理 可见性有序性
vmaps
博客等级 码龄17年 424粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值