java类的生命周期
大阶段 加载 > 使用 > 卸载
其中加载阶段分为 加载 > 链接 > 初始化
链接过程包含 : 验证 > 准备 > 解析
加载阶段
加载 > 链接 (验证->准备->解析) > 初始化
加载
将.class文件加载到jvm中, 这个阶段, jvm根据类的全限定名称获取定义该类的二进制字节流, 并将字节流所代表的静态存储结构转换为方法区的运行时数据结构
加载过程会创建一个java.lang.Class类的实例来表示这个类, 这个Class对象作为程序中每个类的数据访问入口
链接
验证 验证类的正确性 (文件格式 元数据 字节码 二进制兼容性) 保证类结构符合jvm规范
准备 为类变量分配内存并设置初始值 这些变量使用的内存都在方法区分配(这里初始化的类变量即static字段, 实例变量会在对象初始化的时候随对象一起分配在java堆中)
解析 把类的符号引用转换为直接引用(类/接口 字段 类方法 接口方法 方法类型 方法句柄 访问修饰符 7类符号引用) 例如: 代码中有对Myclass 的引用, jvm会查找Mycalss在方法区中的地址, 并将其替换为指向该地址的直接引用
初始化
类加载的最后一步, 也是真正执行类中Java代码(字节码), 初始化阶段是执行构造器()方法的过程, 这里利用的是一种懒加载的思想, 所有Java虚拟机实现必须在每个类或接口被Java程序首次主动使用时才初始化, 但类加载不一定, 静态代码块在类初始化的时候执行
标签:初始化,生命周期,java,字节,jvm,方法,加载 From: https://blog.csdn.net/weixin_44541808/article/details/143187234