java 类加载生命周期,JVM类加载与类的生命周期

一.JAVA虚拟机加载Class的过程

1.类加载器

JAVA中类由类加载器(ClassLoader)和它的子类来实现装载,而类加载器(ClassLoader)是一个重要的运行系统组件,它负责在运行时查找和装入类文件中的类。类加载器与JAVA虚拟机之间的传递是通过字节码传递。

2.类的生命周期

Java类从加载到虚拟机内存中到从虚拟机中卸载,它的整个生命周期包括:

(1)加载

将编译后的class文件加载到内存中,然后创建与加载class对应的类对象。此时Class对象还是不完整,所以此时的类还不可用。

(2)连接

这一阶段是主要对Class对象进行验证 , 准备 , 解析。准备主要为静态变量分配内存并设置默认的初始值,而解析主要是将符号引用替换为直接引用。

验证阶段:主要是检测当前的代码是否可以被jvm正常执行。包括以下验证:

1.类文件的结构检查:检测CLASS文件是否符合了Class的固定结构。

2.语义检查:检测Class的语法是否存在错误

3.字节码验证:验证内容主要包括以下:

(1) 变量要在使用之前进行初始化

(2)方法调用与对象引用类型间要匹配

(3)访问私有数据和方法的规则没有被违反

(4)对本地变量的访问都落在运行时堆栈内

(5)运行时堆栈没有溢出

(6)校验器总是在防范被故意篡改的类文件, 而不仅仅只是检查编译器产生的类文件

准备阶段:主要进行内存的分配,并且对静态变量赋默认值。如下代码,准备阶段会对intVariable分配4个字节的存储空间并且赋默认值0.对longVariable分配8个字节的存储空间并且赋默认值0.

public class PreparatoryPhase {

private static int intVariable = 1;

private static long longVariable;

}

(3)初始化

初始化阶段主要对类进行初始化包括:

1) 加载类的实例

2) 加载类的静态方法

3) 加载类的静态变量

4)实例化一个对象

2)父类初始化,如果类存在直接的父类并且这个类还没有被初始化,先初始化父类;

3)如果类中存在初始化语句,就依次执行这些初始化语句。

(4)卸载

当类的Class对象不再被引用时,Class对象就会结束生命周期,Class类在方法区内的数据也会被卸载,从而结束Class类的生命周期。

我们开分清楚:Class\Class对象\Class的实例

Class代表的是我们编译后的Class文件,JVM加载的Class文件。而Class对象则是通过JVM加载过程后,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值