2024-10-26
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1099908490

回答

Java 中类的生命周期主要包括加载、链接、初始化、使用卸载五个阶段,其中连接又分为验证、准备解析三个步骤。

  • 加载:加载是将类的字节码文件(.class 文件)加载到 JVM 中的过程。
  • 链接:链接分为验证、准备、解析三个步骤:
    • 验证:主要是验证加载字节码是否合法,不会破坏 JVM 的安全性。这个过程包括检查类文件的结构、数据类型的准确性等。
    • 准备:在这个步骤,JVM 会为类的静态变量分配内存空间并初始化为默认值。对于非静态变量,JVM 是在对象实例化时才分配内存空间。
    • 解析:这个步骤主要就是把 Class 文件中、常量池中的符号引用转换为直接引用。主要解析的是类或接口、字段、类方法、接口方法、方法类型、方法句柄等符号引用。
  • 初始化:在这个阶段,类的静态初始化块和静态变量会被执行和初始化。
  • 使用:一旦类被初始化,就可以被实例化或调用。
  • 卸载:当没有任何实例引用一个类,并且这个类在内存中不再被使用时,JVM的垃圾回收机制会将其从内存中卸载。

详解

加载阶段

加载阶段负责将类的字节码加载到 JVM 中。这个阶段主要就是做三件事:

  1. 通过一个类的全限定名来获取定义此类的二进制字节流。
  2. 将读取的二进制字节流存储在 JVM 的方法区中。
  3. 在内存(堆区)中生成一个代表这个类的 java.lang.Class 对象,Class 对象封装了类在方法区内的数据结构,并提供了访问方法区内的数据结构的接口。

类加载的过程由类加载器负责,更多关于类加载器的知识请阅读面试题:JVM 中有哪些类加载器?

链接阶段

链接阶段分为三个步骤:验证、准备和解析。

验证阶段

验证阶段的主要目的是确保类的字节码符合JVM的规范,在这个阶段,JVM 会做如下几个验证: