前言
java 文件通过javac编译成class文件,通过加载生成某种class数据结构形式进入内存,程序通过这种数据结构创建出对象,接下来让我们看看类的生命周期
1.加载
加载是整个类加载机制的一个阶段
主要完成以下步骤
1.通过类的全限定类名获取文件的二进制字节流
2.将这个字节流的静态存储结构加载到方法区的运行时存储结构(将类元信息交给方法区)
3.在内存中生成一个java.lang.Class对象,在方法区中提供一个全局访问入口
2.连接
2.1 验证
验证文件格式、元数据、字节码等等
文件格式验证: 保证输入得二进制字节流能够正确的解析并且存储到方法区上,格式上符合java类型的要求。
2.2 准备
给类的变量赋予默认值
例如
private static int a = 1;
//准备阶段,将a 赋予默认值 0
2.3 解析
主要是针对类或者接口、字段、类方法、接口方法、方法类型、方法句柄和调用限定符7类符号引用进行转换为直接引用
直接引用:在内存中的真实地址
3. 初始化
给类的静态变量赋予初始值
a = 1;
4. 使用
创建实例对象 new Object()
5.卸载
卸载需要满足以下三个条件
1、No instance 该类的所有实例已经消失
2、ClassLoader 该类的ClassLoader实例已经被GC
3、No Reference该类的java.lang.Class对象没有引用存在