JVM生命周期

96 阅读2分钟

JVM 的生命周期可分为三个阶段:加载、运行和销毁。

  1. 加载阶段

在加载阶段,JVM 会加载类的字节码,解析符号引用并将其转化为直接引用等操作。在加载阶段,JVM 会完成以下操作:

  • 加载:通过类的全限定名获取类的二进制数据,并进行字节码解析和校验等操作,最终生成一个表示该类的 Class 对象,此对象包括类的成员变量和方法。

  • 链接:

    • 验证:进行字节码验证,确保字节码是正确且符合规范的;
    • 准备:为类的静态变量分配内存,并赋默认值;
    • 解析:将符号引用转换为直接引用,例如将虚方法转换为实际的内存地址等。
  • 初始化:执行类的构造器,包括静态变量赋值和静态语句块的执行等操作。

  1. 运行阶段

在运行阶段,JVM 会执行字节码,并进行垃圾回收等操作。运行阶段可分为以下两个阶段:

  • 字节码执行:根据方法调用栈的顺序执行字节码指令,包括对象的实例化、方法调用和执行等操作。JVM 使用即时编译器(JIT)对热点代码进行编译,从而提高程序的性能。
  • 垃圾回收:JVM通过垃圾回收算法识别不再使用的对象并进行回收和释放,从而释放内存并提高系统的运行效率。
  1. 销毁阶段

在销毁阶段,JVM 会释放JVM占用的资源,并退出JVM进程。在此过程中,JVM 会依次执行以下操作:

  • 调用对象的 finalizer 方法进行资源释放和清理;
  • 执行 JVM 的关闭钩子(Shut Down Hooks);
  • 最后进行垃圾回收,回收所有无用的资源后,JVM 进程退出。

总之,JVM的生命周期可分为加载阶段、运行阶段和销毁阶段,不同阶段执行着不同的操作,完成类加载、字节码执行、垃圾回收和资源释放等重要任务,保证了 Java 应用程序的正确运行和资源利用。