【JVM】.class类文件是如何被加载的?

文章详细阐述了Java类加载的过程,包括加载、验证、准备、解析和初始化五个步骤,描述了如何将.class文件从磁盘读入JVM内存,进行验证、分配内存、转化引用直至执行类构造器完成初始化。此外,还提及了使用和卸载阶段。
摘要由CSDN通过智能技术生成

一、类加载过程

.class文件最终加载到JVM并使用整体步骤及图示如下:

每个步骤所做的事情如下:

1、加载

(1)通过一个类的全限定名来获取该类文件的二进制字节流;(读取class文件到内存中)

(2)将字节流中的静态存储结构转化为方法区的运行时数据结构;(存到方法区)

(3)在内存堆中生成一个代表该类的java.lang.Class对象引用作为该类的访问入口。

2、验证

(1)文件格式验证:验证字节流是否符合class文件规范;

(2)元数据验证:验证字节码的是否符合java语法规范;

(3)字节码验证:验证字节流中的语义是合法的;

(4)符号引用验证:解析阶段验证直接引用和间接引用是否合法。

3、准备

(1)分配内存:根据类的成员属性分配内存;(比如:char类型分配2字节,int类型分配4字节...)

(2)赋初始值:为类的成员属性赋初始值。比如:成员变量private int a;成员变量a的初始值会被赋值为0。

4、解析:将间接引用转化为直接引用。比如:将Object obj = xxx;中的obj替换成此对象的在堆中的实际内存地址。

5、初始化:本质上是执行类构造器<clinit>()方法的过程,生成的静态变量和代码中定义的保持一致

(1)类构造器<clinit>()会手机所有变量的赋值动作(类成员赋值、静态代码块中的赋值)并进行赋值。

(2)初始化时,如果父类没有初始化则先初始化父类。当且仅当父类(接口除外)中定义的变量被使用时才出发父类的初始化。

6、使用/卸载

二、.class文件具体的执行过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值