Java虚拟机(JVM)的生命周期涵盖了从启动到退出的整个过程,包括以下几个主要阶段:

  1. 启动 (Startup)

    • JVM的启动通常是由用户执行一个Java应用程序开始的,例如通过命令行输入java [类名]或调用API启动。
    • 启动过程中,操作系统创建一个新的进程,并加载特定实现的JVM实例。引导类加载器(Bootstrap Class Loader)首先加载核心Java类库(如rt.jar),然后根据指定的主类(包含main()方法的类)找到并加载这个类。
    • JVM初始化内存区域和子系统,如堆、栈、方法区等。
  2. 类加载与初始化 (Class Loading and Initialization)

    • 当JVM需要使用某个类时,类加载机制会启动,按照双亲委派模型加载对应的字节码文件(.class文件)到方法区中。
    • 类的生命周期包括:加载(查找并读取类的二进制数据)、验证(确保类信息符合JVM规范且不危害虚拟机安全)、准备(为静态变量分配内存并初始化默认值)、解析(将符号引用转换为直接引用)、初始化(执行类初始化代码,即static块和静态字段赋值)。
  3. 程序执行 (Program Execution)

    • 一旦主类加载完毕,其main()方法会被调用,标志着程序开始正式运行。
    • 程序中的所有线程都在JVM内部管理,包括主线程和其他由主线程或其他线程创建的线程。
    • 执行引擎负责解释或编译字节码指令,并在不同的内存区域之间进行操作,如创建对象、执行方法调用、处理异常等。
  4. 垃圾回收 (Garbage Collection)

    • 在整个JVM生命周期内,垃圾回收器持续监控堆内存,自动回收不再使用的对象所占用的空间。
    • 对象的可达性分析、分代收集策略等是垃圾回收机制的重要组成部分。
  5. 终止 (Termination)

    • 当程序的所有非守护线程都终止或者调用了System.exit()方法时,JVM进入终止阶段。
    • 此阶段JVM会做一些清理工作,如释放剩余资源、关闭线程、执行finalization(如果有未被GC回收的对象需要终结)等。
    • 清理完毕后,JVM进程结束,生命周期随之结束。
  6. 监控与诊断 (Monitoring and Diagnostics)

    • 在JVM运行过程中,可以使用各种工具(如jps、jstack、jmap、jconsole等)来监控和诊断JVM的运行状态,包括内存使用情况、线程状态、类加载信息等。

了解JVM的生命周期有助于开发者优化程序性能、调试问题以及深入理解Java平台的底层工作机制。