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

JVM虚拟机中的类加载机制和双亲委派模型 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。 阅读详情

第一、类加载过程

首先呢,应用程序在使用我们Java类时,包含以下七个阶段,即生命周期:

1、加载:通过类的全限定名找到.class文件,把它从一个文件的字节流按照虚拟机规定的运行时的数据结构存储在方法区中,最后在虚拟机内存中生成一个代表这个类的class对象,作为访问这些数据的入口

2、验证:检查每个.java文件对应的.class文件所形成的字节流中包含的信息是否符合虚拟机规范的要求,是否存在危害虚拟机安全的代码;

文件格式验证主要是验证class文件格式是否符合虚拟机的要求,能不能被当前虚拟机处理。包含了魔数验证,版本号验证,是否有不支持的常量等等。这个阶段验证完成后才会将class文件中的字节流加载到内存中。
元数据验证数据即是对类的描述数据,主要验证对类的描述数据代表的语义是否符合java的语法,例如,这个类继承的类是否正确,是否实现了接口中所有的方法,类中重载的规则对不对等等。
字节码验证字节码验证主要来验证程序的逻辑是否符合java语法,比如是否有不符合要求的类型转换等。
符号引用验证符号引用是用来保证解析过程能够正常执行,所以符号引用也发生在解析的时候,主要是验证符号引用是否能找到被引用对象等。如果这个class文件已经被反复验证过为了提高效率可以通过设置参数来取消对某个类的验证。

3、准备:为static 修饰的类变量分配内存,并且设置初始值(0、false等),但如果是被final修饰的变量会直接赋对应的值;

4、解析:将符号引用转化为直接引用,这里符号引用就是对引用对象的一个由符号组成的描述符,通过符号引用可以定位到目标。在编译阶段编译器并不知道引用对象的地址所以只能用符号引用来定位目标。直接引用就是目标的地址或者能找到对象的句柄的地址。

5、初始化: 会将类中所有static修饰的类变量、静态语句块执行一遍;

6、使用:使用new 创建对象;

7、卸载:在虚拟机垃圾回收过程中,将类对象实例从虚拟机内存中移除;

 

第二、类加载器(类加载阶段)

类加载器:用于实现类的加载,java中分为以下三种类加载器:

双亲委派模型的过程:

      某个特定的类加载器在接到加载类的请求时,首先不会自身先去尝试加载,而是将加载任务委托给父类加载器,依次递交,直到启动类加载器,如果父类加载器可以完成加载任务,就成功返回;只有父类加载器无法完成加载任务时,才依次向下尝试子类加载器去加载,成功即返回,若直到自身加载器也无法加载,返回ClassNotFoundException。

注:双亲委派模型不是继承关系,是组合关系!

双亲委派模型的好处:

      Java类随着它的加载器一起具备了带有优先级的层次关系,避免一个类被多个加载器重复加载及由于不同加载器加载的类是不一样的,导致程序混乱,这样可以保证虚拟机所用基础类被正确加载,保证了Java程序的稳定运行。

 

 

PX4无人机-Gazebo仿真实现动态目标追踪的视觉控制方案 本文详细介绍了PX4无人机在Gazebo仿真环境中实现动态目标追踪的视觉控制方案。从PX4与Gazebo仿真环境搭建、动态目标追踪核心技术栈、仿真环境深度定制技巧到追踪算法的优化实践,提供了全面的技术指导和常见问题排查方法,帮助开发者高效实现无人机视觉追踪功能。 阅读详情

相关推荐

仿人型机械臂逆运动学避坑指南:当末端三关节平行时如何处理奇异点

本文深入探讨了6R仿人型机械臂在末三轴平行结构下的逆运动学求解策略,重点分析了运动学逆解中的奇异点问题及其处理方法。通过MATLAB实现展示了D-H参数建模、几何解析法求解流程以及奇异点规避策略,为工业机器人开发提供了实用的数值算法方案和工程优化技巧。

sss66的博客 883

【Java虚拟机】JVM类加载机制和双亲委派模型

JVM的类加载机制和双亲委派模型

互联网小阿祥 838

stm32f407等芯片(HAL库)时钟频率修改(乱码)

其他片子及库文件未知、未验证,只是在使用stm32f407ZG配置串口打印的时候,出现乱码,就从以下几方面定位问题: 1. 确认串口GPIO相关配置; 2. 确认波特率等参数; 3. 确认时钟频率; 结果这次使用YH的串口打印程序在ZDYZ的开发板调试项目工程(有点另类...),做功能验证,就出现了以上问题,出于好奇开始调试,最终发现是时钟频率问题。 看到下图这个配置,因为ZDYZ开发板使用的是8MHz外部晶振(好像默认的是25MHz,如图2),所以他这里PLL_M是25,不是推荐值,感...

bulefire2009的博客 5516

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

一文搞懂类加载机制以及双亲委派模型

weixin_74047328的博客 879

基于STM32的红外测温系统设计

为了实现本次的毕业设计,我搜集了大量的文献与资料,通过这些资料了解到红外测温的优点,与实现所需的基本器件,并设计了几个方案,最终选择了STM32作为主控芯片,为此还查阅了关于STM32的资料,在此次设计中采用的是MLX90614医用红外测温模块,通过查阅其数据手册了解其测量精度高且自带温度补偿,所以选择了该传感器作为红外测温模块,本次设计到此已经基本完成,硬件部分和软件部分的设计已基本完成。

weixin_112233的博客 1422

从Zemax到Speos:HUD设计数据无缝迁移避坑指南(含STEP文件精度验证)

本文详细介绍了从Zemax到Speos的HUD设计数据无缝迁移方法,重点解决Zernike曲面参数保真、虚拟厚度设置和坐标系对齐等核心问题。通过STEP文件精度验证和工程化解决方案,帮助工程师避免数据迁移中的常见陷阱,提升HUD系统设计效率。适用于Ansys Zemax和Ansys Speos用户,优化光学性能验证流程。

h6i7j8的博客 1064

JVM 类加载机制 & 双亲委派模型

验证步骤,主要有两件事:验证内容是否符合格式要求,它的依据就是上面的 .class文件格式将 内容 转为结构化数据,也就是上面的 .class文件格式一个进程中,一个类的加载,只会触发一次!!!一个类,只会进行一次类加载。Java官方文档中,其实是把 “验证”,“准备”,“解析”,这三个步骤,合并成一个了。加载验证+准备+解析初始化那么,上述的 5 个步骤,只是官方文档这么说的。至于JVM 实际实现的时候,是啥顺序,不好说。

2301_80934700的博客 916

MedicalNet实战:3D医疗影像分割从零到部署(PyTorch+ResNet50)

本文详细介绍了基于PyTorch和MedicalNet预训练模型进行3D医疗影像分割的完整实战流程。通过加载ResNet50预训练权重进行迁移学习,大幅降低了对标注数据量的需求,并提升了模型性能。文章涵盖了从数据准备、模型微调、训练优化到最终部署的每一步,为医疗AI开发者提供了从零到部署的清晰指南。

weixin_29062671的博客 588

Java类加载机制和双亲委派模型

我们在使用一个Java类的时候,比如使用累的静态属性或者new一个对象,JVM虚拟机会将我们目标类的文件加载到JVM特定的内存区域,然后经过一系列的加载流程,最后我们的程序才能够使用,这整个流程称之为,也就是说我们要使用一个类,必须先加载才能使用。当然,一个类的声明周期不单单只是加载,还有许多阶段,例如初始化、卸载等操作。 JVM类加载是通过一系列的类加载器进行实现,类加载器具有加载一个.class的文件能力,不同的类加载器有着不同的效果。 如图所示,我们要使用自己写的com.minor.test类,则J

Minor的Java技术博客 1189

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版下载及安装教程

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版网盘下载及安装教程

智慧空间实验室 2388

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2190

解析Java类加载的运行机制和双亲委派模型

类加载形如把.class文件,加载到内存中,得到类对象这样的过程。类加载机制是Java虚拟机(JVM)加载类的过程,而双亲委派模型是指在类加载过程中,JVM通过委派的方式来从不同的类加载器去加载类。这个机制主要用于确保类的一致性、安全性和避免重复加载。

st200112266的博客 813

【Power Compiler手册】13.UPF多电压设计实现(2)

在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的原子电源域,并且确认所有属性都匹配。因此,域合并成功,工具会丢弃来自BLOCK的域。在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的非原子电源域,发现电源域不匹配。在这个场景中,在约束传播期间,工具会比较BLOCK中的非原子电源域与TOP设计中的原子电源域,发现电源域不匹配。在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的原子电源域,发现它们的一些属性不匹配。

QRBQ 750

JVM类加载机制和双亲委派模型

类的生命周期 加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载(垃圾回收) Loading - Verification - Preparation - Resolution - Initialization - Using - Unloading 类加载器名称 启动类加载器Bootstrap ClassLoader 存放在<JAVA_HOME>\lib 目录...

鲜衣怒马楼兰月 303

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

简单认识 JVM —— 了解类加载机制和双亲委派模型

JVM 是 Java Virtual Machine 的简称,Java 虚拟机。虚拟机是指通过软件模拟具有完整硬件功能、运行在一个完全隔离的环境中的完整计算机系统。JVM 是主流虚拟机,其他常见的虚拟机还有:VMwave, Virtual Box.JVM 是 Java 运行的基础,也是实现一次编译到处执行的关键。一个 java 文件从编译到执行需要经过以下四个阶段。JVM 结构图: 总结来看,JVM 主要通过四个部分来执行程序。分别是: 类加载器(ClassLoader)、运行时数据区(Runntime D

AlinaQ05的博客 991

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jvm类加载机制_图解JVM类加载机制和双亲委派模型

我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件。JVM 通过类加载器来加载字节码文件,然后再执行程序。什么时候加载一个类那么,什么时候类加载器会加载一个类呢?用到这个类的时候,JVM的类加载器就会加载这个类。用到这两个字说起来很抽象,我用代码和图例来说明。有下面这样一段代码,一个类EmergencyPlan,里面有一个main()函数,mai...

weixin_39980809的博客 125

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

类加载机制和双亲委派模型的探讨

编译即javac的过程,负责将.java文件编译成.class文件,主要是类型,格式检查与编译成字节码文件;加载是指java*过程,将.class文件加载到内存中去解释执行。类的加载时机在运行时,但并不是一次性全部加载,一般来说一个class只会被加载一次,之后就会从jvm的class实例中获取,不会再去文件系统中加载.class文件了。 java虚拟机中类加载的全过程:加载、验证、准备、解析和...

weixin_42373873的博客 165

Java虚拟机类加载机制和双亲委派模型

一、虚拟机类加载机制 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 二、类的生命周期   类的生命周期是从类被加载到虚拟机的内存中,到卸载出内存为止。   Java语言里,类型的加载和连接过程(连接过程包括验证、准备、解析)是在程序运行期间完成的。   加载(装载)、...

weixin_30823227的博客 93

双亲委托类加载机制_图解JVM类加载机制和双亲委派模型

我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件。JVM 通过类加载器来加载字节码文件,然后再执行程序。什么时候加载一个类那么,什么时候类加载器会加载一个类呢?用到这个类的时候,JVM的类加载器就会加载这个类。用到这两个字说起来很抽象,我用代码和图例来说明。有下面这样一段代码,一个类EmergencyPlan,里面有一个main()函数,mai...

weixin_39719472的博客 81

JVM中类加载机制和双亲委派模型

类加载机制 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是类加载机制。 类生命周期: 双亲委派模型 先介绍三种类加载器 启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载JAVA_HOME/lib/目录中的,或者被-Xbootclasspath参数所指定的路径中并且被虚...

xly19999的博客 335

JVM——类加载机制和双亲委派模型

类加载器和双亲委派模型 1. 什么是类加载器 在java语言中,类(class)只有被加载到JVM中才能被运行。当一个程序要运行时,JVM会将编译生成的.class文件加载到内存中去。这个加载的过程就是有类加载器(ClassLoader)实现的。 #mermaid-svg-hGdNBAbBssBQOcKo .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;col

LeeCM0715的博客 375

JAVA的类加载机制和双亲委派模型

一、类加载机制 1.什么是JAVA类加载机制: 虚拟机把描述类的数据从.class中加载到内存,并对数据进行连接和初始化,最终形成可以被虚拟机直接使用的java类型。 2.JAVA类的生命周期: 加载 验证 准备 解析 初始化 使用 卸载 -->类的加载过程(包含前五部分) 3.类加载器(ClassLoader) (1)它很重要,工作在Class的加载阶段 (...

IMUHERO 315

面试专题(五):类加载机制和双亲委派模型

一、类加载机制 应用程序在使用类的时候,这个类的生命周期其实包括了如上图所示的七个阶段。 **使用:**就是我们平时在编码过程中用new关键字去创建一个类的实例去使用这个类。 **卸载:**虚拟机通过垃圾回收机制将这个类的信息和这个类相关的实例从虚拟机内存区域中移除。 一个虚拟机加载类的全过程就包括了:加载–&amp;gt;验证–&amp;gt;准备–&amp;gt;解析–&amp;gt;初始化 **加载:**通过这个类的全限...

nelson的博客 1640

类加载机制和双亲委派模型,如何打破双亲委派

loadClass默认双亲委派逻辑在中实现。直接重写该方法可绕过委派:java复制插入@Override// 自定义逻辑直接加载类Class<?return c;复制插入。

qq_27288881的博客 244
上一篇: SpringBoot 项目 @EnableWebMvc 和@EnableAutoConfiguration注解一些坑总结
下一篇: 线程池内部对于新提交的任务是如何处理的?
Code_Flyer
博客等级 码龄9年 0粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值