整个生命周期分为7个过程:1.加载 2.验证 3.准备 4.解析 5.初始化 6.使用 7.卸载
1.加载阶段
A.通过一个类的全限定名来获取此类的二进制字节流
B.把该二进制字节流转化为方法区运行时的数据结构
C.在JAVA堆中生成一个java.lang.class对象,作为方法区数据的访问入口
2.验证阶段
目的是为了确保CLASS文件的字节流中包含的信息符合当前虚拟机的要求
该阶段包含4个验证过程:文件格式验证,元数据验证,字节码验证,符号引用验证
3.准备阶段
正式为类变量分配内存并设置初始值的阶段,不包含对实例变量进行赋值
4.解析阶段
JVM将方法区中常量池内的符号引用替换为直接引用的过程
解析动作主要针对 类或接口,字段,类方法,接口方法四类符号引用进行
5.初始化阶段
该阶段才真正开始执行JAVA程序代码,是执行类构造器clinit()的过程。
clinit()方法是编译器自动收集类中的所有类变量的赋值动作和静态语句块的语句合并产生的
子类的clinit()方法在执行之前,父类的clinit()方法已经执行完毕