https://www.cnblogs.com/zhouyi2021/p/14896977.html image.png

    • 加载阶段:根据特定名称查找类或接口类型的二进制数据文件,就是 class 文件,并由此数据文件来创建类或接口的过程。
    • 连接阶段:为了让类和接口可以被 Java 虚拟机执行,而将类或接口并入虚拟机运行时状态的过程。这个阶段做的工作比较多,还可以细分为下面三个阶段:
      • 验证阶段:主要是校验类文件结构上的正确性,确保 class 中的数据信息符合当前虚拟机的约束要求。
    • 文件格式验证、元数据验证(抽象类,继承类规则等)、字节码验证和符号引用验证(不会做出危害虚拟机安全的行为)。

      • 准备阶段:为类或接口的静态变量分配内存,并且以初始化这些变量的默认值,这些变量需要使用的内存都在方法区中进行分配。

      • 解析阶段:虚拟机将类在常量池内的符号引用转换为直接引用的过程。
        • 什么是符号引用?
          • 比如org.simple.People类引用了org.simple.Language类;
          • 在编译时People类并不知道Language类的实际内存地址,因此只能使用符号org.simple.Language
    • 初始化阶段:初始化对于类或接口来说,就是执行它的初始化方法(),真正开始执行类中定义的 Java 程序代码,为类的静态变量赋予正确的初始值。和static{}块执行

    https://blog.csdn.net/yuyan_jia/article/details/120497986 https://blog.csdn.net/NumOneDD/article/details/109848267

    image.png