连接阶段

 
notion image
 

验证阶段

  • 连接(Linking)阶段的第一个环节是验证, 验证的主要目的是检测java字节码文件是否遵守了《Java虚拟机规范》中的约束。这个阶段一般不需要程序员参与
  • 主要包含如下四部分 ,具体详见《Java虚拟机规范》:
      1. 文件格式验证 , 比如文件是否以 0xCAFEBABE开头, 主次版号是否满足当前虚拟机版本
      1. 元信息验证, 例如类必须有父类(super不能为空)
      1. 验证程序执行指令的语义, 比如方法内的指令执行到一半强行跳转到其他方法去
      1. 符号引用验证, 例如是否访问了其他类中private的方法等
 

准备阶段

  • 准备阶段为静态变量(static)分配内存并设置初始值
notion image
  • 准备阶段只会给静态变量赋值初始值, 每一种基本数据类型和引用数据类型都有其初始值
notion image
  • final修饰的基本数据类型的静态变量, 准备阶段直接会将代码中的值进行赋值
notion image
 

解析阶段

  • 解析阶段主要是将常量池中的符号引用替换为直接引用
  • 符号引用就是在字节码文件中使用编号来访问常量池中的内容
    • 直接引用不再使用编号, 而是使用内存中地址进行访问具体的数据
notion image
notion image