请注意,本文编写于 548 天前,最后修改于 548 天前,其中某些信息可能已经过时。
JVM的类加载机制是Java虚拟机将类的字节码加载到内存并进行初始化的过程。这个过程包括了加载、验证、准备、解析和初始化五个阶段。下面将详细解释每个阶段的作用和顺序。
-
加载阶段:
- 通过类的全限定名获取类的二进制字节流。
- 将字节流转化为方法区的运行时数据结构。
- 在内存中生成一个代表这个类的java.lang.Class对象,作为访问类数据的入口。
-
验证阶段:
- 确保被加载的类的字节流符合虚拟机的要求,不会危害虚拟机的安全。
- 包括文件格式验证、元数据验证、字节码验证和符号引用验证。
-
准备阶段:
- 为类的静态变量分配内存,并将其初始化为默认值。
- 只包括类变量(被static修饰的变量),实例变量将在对象实例化时分配在Java堆中。
- 初始值通常是数据类型的默认零值,而不是在Java代码中显式赋予的值。
-
解析阶段:
- 将类中的符号引用转换为直接引用。
- 解析动作主要针对类、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符等符号引用。
-
初始化阶段:
- 对类的静态变量进行初始化操作。
- JVM负责为类变量赋予正确的初始值。
- 静态代码块也在这个阶段执行。
加载、验证、准备和初始化这四个阶段的顺序是确定的,而解析阶段在某些情况下可以在初始化阶段之后开始,以支持Java语言的运行时绑定特性。
Learn more:
- 关于JVM类加载机制,看这一篇就够了 - 掘金
- JVM 基础 - Java 类加载机制 | Java 全栈知识体系
- JVM类加载机制详解,建议看这一篇就够了,深入浅出总结的十分详细! - 前程有光 - 博客园
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!