Java入门之了解JVM(20)

【验证】:对二进制字节码流按规范进行校验(魔术、版本号等等),看是否符合要求;对代码进行审查,看是否符合安全规范

【准备】:给类变量在方法区中分配内存空间并进行初始化值,注意类变量初始化分为以下两种情况:

普通类变量(static修饰):初始化为类型的默认值,如下:

Java入门之了解JVM

如:public static int a = 100; 在准备阶段初始化为a = 0;而不是100;初始化阶段才赋值为100

类的常量(static final 修饰):对于常量而然,在编译java时就已经为其生成了ConstantValue;那么在准备阶段,初始化值时就会直接根据ConstantValue来初始化;即public static final a = 100;在准备阶段就会直接初始化为100;【解析】:jvm将常量池(Constant pool)中的符号引用转为内存的直接引用;如const #2 = Field将会转为 num2 = 内存地址(指针/偏移量)

初始化:初始化阶段是整个类加载过程的最后一个阶段,到了这个阶段,才开始真正执行类中定义的 Java程序代码;初始化阶段主要是对类变量进行赋值,并保证类初始化时先初始化其父类,即先完成父类中的类成员的初始化工作

推荐阅读