类从加载到JVM中开始,到卸载共经历了七个阶段。
生命周期包括:加载、验证、准备、解析、初始化、使用和卸载
-
加载(Loading)
- 获取二进制字节流。
- 静态存储结构转化为方法区的运行时数据结构。
- 在Java堆中生成一个类对象,作为方法区的访问入口。
-
验证(Verification)
- 验证Calss文件的标识:魔数 Magic Number
- 验证Calss文件的主次版本号
- 验证常量池(常量类型、常量类型数据结构是否正确)
- Calss文件的每一个部分(字段表、方法表等是否正确)
- 元数据验证(父类验证、继承验证)
- 字节码验证(指令验证)
- 符合引用验证(通过符号引用是否能找到字段、方法、类)
-
准备(Preparation)
- 为类变量分配内存并且设置变量的初始化阶段
- 支队static类变量进行内存分配
- 类变量:一般称为静态变量
- 实例变量:当对象被实例化的时候,实例变量跟着变化,跟着销毁
-
解析
- 对符号引用进行解析
- 直接引用:指向目标的指针和偏移量
- 符号引用—》直接引用
- 主要涉及:类、方法、字段、方法等等
- 字段解析
- 类的解析
- 接口方法的解析
-
初始化
- 类的实例构造器 类的初始化
- 静态变量 静态块初始化 如果没有静态块静态变量则没有clinit
-
使用
-
卸载