JVM类加载过程

JVM类加载过程详解 除了上面三个自带的以外,用户还能制定自己的类加载器,但是所有自定义的类加载器都应该继承自java.lang.ClassLoader。比如热部署、tomcat都会用到自定义类加载器。在java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什仫要自定义类加载器?1. 隔离加载类2. 修改类加载的方式3. 扩展加载源4. 防止源码泄露用户自定义类加载器实现步骤: 阅读详情

类加载的最终目的是将磁盘的class文件解析成类元信息放到jvm内存区域。

类加载过程可以分为以下几个过程:

1.加载过程

 从磁盘查找并通过IO将class文件加载到jvm内存区域。

 class文件的编码格式是十六进制,最开始是cafe babe,标准的class文件开头。

2.验证过程

 验证文件的格式是否正确,是否被手动修改过。

 即校验class文件里的内容是否符合java虚拟机规范。

3.准备过程

 将静态变量进行初始值赋值,比如int类型赋值为0,boolean类型赋值为false。

4.解析过程

 将符号引用转变为直接引用。

 即把静态方法的符号(比如main方法的方法名,方法上的括号等)引用替换为指向该方法所在内存地址的指针,也就是静态链接。

 顺便提及动态链接,动态链接就是在运行时将符号引用替换为直接引用,比如只有在调用某个实例的非静态方法时,这个非静态方法的符号引用才会被替换为直接引用。该过程是实现多态的关键。而这些符号引用中所谓的符号,就存储在了该类的常量池中(通过javap -v xxx.class反编译之后,在输出的信息中包含一个Constant pool列表,列表中都是#开头的字面量)。

通常,java代码被编译之后,程序流程控制都与Constant pool中的符号引用息息相关,但是此时,#开头的字面量都是静态的,而一旦该类被加载进jvm内存区域后,以#开头的字面量都会被替换成指向具体存储该数据信息的内存地址的指针。

之所以在解析阶段进行静态链接,是为了提高效率,因为静态方法被加载之后,它的内存地址不会再变了。而动态链接,比如多态,或者调用的接口有不同的实现,导致真正实现类的

代码不是固定的,只有真正在程序运行过程中才能确定实现代码的具体内存位置。

5.初始化:

 对类的静态变量初始话为指定的值,执行静态代码块。

以上就是类加载的全过程。

类被加载到方法区后,有两个比较重要的信息:类加载器的引用和对应的class实例的引用。

类加载器的引用是这个类到类加载器实例的引用。

对应class实例的引用是堆中创建的一个Class类型的对象实例,作为开发人员访问方法区中类定义的入口和切入点。

jvm的类加载机制属于懒加载,也就是说运行时只有真正用到某个类时才会去加载这个类。

但是,定义某个类并不能算作使用这个类。因此类的定义并不能触发类的加载。

保姆级教程:用GlobleLand30数据+GTB3.3软件,一步步搞定MSPA景观格局分析 本文提供GlobleLand30数据结合GTB3.3软件进行MSPA景观格局分析的保姆级教程,涵盖数据预处理、软件操作、结果解读全流程,特别针对零基础用户常见问题提供解决方案,助力研究者高效完成景观生态学分析。 阅读详情

相关推荐

Hypermesh2021实战:塑料圆盘结构化网格划分全流程(附避坑指南)

本文详细介绍了使用Hypermesh2021进行塑料圆盘结构化网格划分的全流程操作,包括几何预处理、网格生成策略及质量验证。特别针对工程实践中常见的12个典型问题提供解决方案,帮助用户提升CAE仿真分析的精度和效率。

weixin_29294597的博客 319

JVM 类加载过程笔记

JVM类加载过程详解:从字节码到可执行对象 摘要:JVM类加载是将.class文件转换为可执行对象的过程,分为加载、验证、准备、解析和初始化五个核心阶段。加载阶段读取字节码并生成Class对象;验证确保代码安全性;准备分配静态变量内存;解析转换符号引用;初始化执行静态代码块。JVM采用双亲委派模型,通过启动类加载器、扩展类加载器和应用类加载器实现层次化加载。类卸载需满足Class对象和类加载器均无引用条件。该机制保证了Java程序的安全性和灵活性,支持动态扩展和自定义加载逻辑。

笑衬人心的博客 1292

cellranger安装以及使用

接受cellranger count的输出数据,将同一组的不同测序样本的表达矩阵整合在一起,比如tumor组原来有4个样本,PBMC组有两个样本,现在可以使用aggr生成最后的tumor和PBMC两个矩阵,并且进行标准化去掉测序深度的影响。但是由于病毒基因组太小了,且注释结果只有CDS没有exon,所以曲线救国,将CDS整体替换为exon,也不进行过滤了,直接下一步。虽然安装完毕,但是现在要运行cellranger的话需要在终端输入cellranger的整个路径。自动执行这个命令,需要将“

m0_59974475的博客 9396

JVM类加载机制详解(一)JVM类加载过程

首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1、什么是类加载?类加载的时机? 2、什么是类初始化?什么时候进行类初始化? 3、什么时候会为变量分配内存? 4、什么时候会为变量赋默认初值?什么时候会为变量赋人为设定的初值? 5、类加载器是什么? 6、如何编写一个自定义的类加载器? 首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*

Leeon的博客 6万+

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2172

BeikeShop跨境电商独立站系统V1.5.0免授权全开源版

BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统,主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop商城 Beike多语言商城 多货币商城B2C商城系统 代码100%开源 PHP商城系统 H5/PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 9 框架插件化开发,MVC架构 支持插件市场。Event 机制实现Hook功能,自定义可视化装修。

820

JVM类加载过程解析

当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化。当一个类加载器收到类加载请求时,首先不会自己尝试加载,而是委派给父类加载器。只有当父类加载器反馈无法完成加载请求时,子加载器才会尝试自己加载。当初始化一个类时,发现其父类还未初始化,需先触发其父类的初始化。

斗锋在干嘛的博客 822

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

JVM类加载机制—JVM类加载过程

JVM类加载过程分析

weixin_44991038的博客 1540

DEM边界数值爆炸?用ArcGIS空间分析工具链搞定异常值过滤全流程

本文针对DEM数据处理中常见的边界数值爆炸问题,提供了一套完整的ArcGIS空间分析解决方案。文章深入剖析了异常值产生的根源,并详细介绍了从诊断、定位到使用栅格计算器、重分类等工具进行精准过滤与修复的全流程工作流,帮助用户彻底解决由插值误差、数据拼接及坐标系转换引发的数值异常。

weixin_29269441的博客 148

别再怕ADRC调参了!手把手教你用MATLAB/Simulink搞定TD、ESO、NLSEF(附完整参数表)

本文详细解析了ADRC(自抗扰控制)的调参方法,通过MATLAB/Simulink实战演示,帮助工程师快速掌握TD、ESO和NLSEF模块的参数整定技巧。文章提供了完整的参数表和调参指南,解决ADRC调参难题,提升控制系统的鲁棒性和性能。

weixin_30252709的博客 177

jvm类加载过程_Java 类加载过程

类加载器是用来把类 class 装载入 JVM。类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中类加载过程包括:加载、验证、准备、解析和初始化五个阶段。类加载器的任务就是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例。BootstrapClassLoader、...

weixin_39866265的博客 195

4D毫米波雷达天线设计

多种天线布局方案介绍、天线设计要点介绍

5734

jvm类加载过程_JVM的类加载过程是怎么样的?

类加载过程分为加载、验证、准备、解析、初始化五个阶段。其中验证、准备、解析又合称为连接阶段。加载加载阶段是将class文件读取到内存的过程。具体分为三步,第一步根据class的全限定名获取class的二进制字节流,第二步将class的二进制字节流转化成数据结构存储在方法区,第三步在虚拟机堆中生成一个java.lang.class对象用来指向方法区中的class数据结构。验证验证阶段是验证class...

weixin_39820910的博客 158

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jvm类加载过程_JVM 类加载过程详解

图1 概览类加载器的本质类的加载(LOADING)是指:将类的 .class 文件转化为二进制字节流将该字节流所代表的静态存储结构转化为方法区的运行时数据结构然后在内存区创建一个 java.lang.Class 对象作为方法区这个类的各种数据的访问入口。(并没有明确规定是在Java堆区中创建Class对象)其中将 .class 文件转化为二进制字节流中这个动作是放到 Java 虚拟机外部去实现的,...

weixin_39606244的博客 152

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

小结:jvm 类加载过程

类加载器通过委派链形成包含关系,每个加载器通过parent字段引用父加载器,而非继承。这种设计保障了核心类库的隔离性与安全性,同时允许用户自定义类加载逻辑。

weixin_44719499的博客 1331

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jvm类加载过程_类加载过程【JVM:类加载机制深度剖析】 第4篇

本文在文章底部有配套学习视频前言 在前面我们介绍了JVM的核心三部分:类加载器、字节码解释器、运行时数据区。 这一节我们来介绍下类加载器。一、类加载过程多个java文件经过编译打包生成可运行jar包,最终由java命令运行某个主类的main函数启动程序,这里首先需要通过类加载器把主类加载到JVM,主类在运行过程中如果使用到其它类,会逐步加载这些类。注意:对于我...

weixin_40002846的博客 193

【JVM】详解 类加载器与类加载过程

摘要:Java类加载机制采用双亲委派模型,包含启动类、扩展类和应用程序类三种加载器。类加载流程分为加载、连接(验证、准备、解析)和初始化阶段,其中初始化触发条件严格限定。双亲委派机制通过递归请求父类加载器保证安全性和类的唯一性,但存在破坏场景如线程上下文类加载器和OSGi热部署。JDK9引入模块化后,类加载器架构调整为平台类加载器取代扩展类加载器,并采用新的模块归属机制。类加载器与类本身共同确定类的唯一性,不同加载器加载的相同类被视为不同类。

Muyu1uz的博客 1011

JVM堆栈,类加载过程

JAVA在程序运行时,在内存中划分5片空间进行数据的存储。分别是:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。基本数据类型、局部变量都是存放在栈内存中的,用完就消失。new创建的实例化对象及数组,是存放在堆内存中的,用完之后靠垃圾回收机制不定期自动消除。示例main()int x=1;show ()int x=2主函数main()中定义变量int x=1,show()函数中定义变量int x=1。最后show()函数执行完毕。

m0_52796363的博客 1323

Jvm类加载的过程

目录 Jvm类加载的过程 类加载的时机 类加载过程 类加载器 Jvm类加载的过程 类加载的时机 类从被加载到虚拟机内存开始,到卸载出内存为止,整个生命周期包括:加载,验证,准备,解析,初始化,使用和卸载 ; 规定5种情况: 遇到new,getsta...

weixin_30710457的博客 79

JVM的类加载过程

类加载主要分为5个过程:加载、验证、准备、解析、初始化,其中验证、准备、解析统称为连接过程。

cj_eryue的博客 605
上一篇: JVM常用垃圾收集器簡介
下一篇: JVM双亲委派
js125
博客等级 码龄14年 13粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值