类的加载机制

什么是类的加载

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口


加载步骤

包含了加载、验证、准备、解析和初始化这 5 个阶段。

加载

加载阶段的目的是将类的.class文件加载到JVM中,加载过程会创建一个java.lang.Class类的实例来表示这个类。这个Class对象作为程序中每个类的数据访问入口。

验证

校验类的正确性(文件格式,元数据,字节码,二进制兼容性),保证类的结构符合JVM规范

准备

为类变量分配内存并设置类变量的默认初始值,这些变量使用的内存都在方法区中分配。

解析

把类的符号引用转为直接引用

初始化

初始化是类加载的最后一步,也是真正执行类中定义的 Java 程序代码(字节码),初始化阶段是执行类构造器,这里利用了一种懒加载的思想,所有Java虚拟机实现必须在每个类或接口被Java程序首次主动使用才初始化

初始化时机:

当遇到 new、 getstatic、putstatic或invokestatic 这4条字节码指令时;

使用 java.lang.reflect 包的方法对类进行反射调用时,如果类没初始化,需要触发其初始化;

初始化一个类,如果其父类还未初始化,则先触发该父类的初始化

当虚拟机启动时,用户需要定义一个要执行的主类 (包含 main 方法的那个类),虚拟机会先初始化这个类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值