我们都知道,一个Java程序执行流程(底层运行机制)
读取编译产生的class文件,将其转化为某种静态数据结构存储在方法区,并在堆中生成可以供用户调用的对象
验证:随着版本的发展。验证的策略会越来越完善
1.文件格式验证
2.元数据、字节码验证
3.符号引用验证
准备:
public class Test {
private int a=1;
static int b;
static {
b=1;
}
}
源信息依然是保存在元空间中,只是常量池等存储发生了改变,存储在堆中。
这里的静态变量b在定义是会赋0值。
解析:将符号引用变为直接引用,在一个类A中,除了有A的引用,还有B的引用,在class文件中,用一段字符串表示B的引用地址,这个字符串就称为符号地址。在A的加载时,将字符串作为符号地址将B加载进虚拟机,此时就将符号地址变为直接地址。
在加载时,B可能是一个具体的实现类,也可能是一个接口,抽象类等等不具体的,在B是一个具体的实现类时直接使用B的直接引用进行解析将B加载进虚拟机。如果不是一个具体的,B可能有C和D两个实现类。
初始化:主动资源的初始化动作。



