JVM 生命周期:从启动到退出的完整历程
JVM(Java 虚拟机)作为运行字节码的虚拟进程,其生命周期遵循 “启动 - 执行 - 退出” 的完整流程。理解这一过程有助于深入掌握 JVM 的运行机制,以及排查与进程生命周期相关的问题(如进程异常退出、资源未释放等)。
JVM 启动:初始化与类加载
JVM 的启动是一个从无到有创建虚拟机进程的过程,核心是通过引导类加载器加载初始类,完成虚拟机的初始化。
1. 启动触发方式
- 命令行启动:通过
java命令启动(如java -jar app.jar或java com.example.Main),底层调用 JVM 的启动接口(如JNI_CreateJavaVM)。 - 嵌入式启动:通过 JNI(Java Native Interface)在其他语言(如 C/C++)中嵌入 JVM,手动调用启动接口创建虚拟机实例。
2. 启动核心步骤
- 创建 JVM 实例:操作系统分配进程资源,初始化 JVM 的内部数据结构(如内存管理模块、线程管理模块)。
- 初始化引导类加载器:引导类加载器(Bootstrap ClassLoader)是 JVM 自带的加载器,负责加载 JVM 运行必需的核心类(如
java.lang.Object、java.lang.ClassLoader等,位于rt.jar中)。 - 加载初始类:
初始类由虚拟机实现指定(通常是用户程序的入口类,即包含main方法的类)。引导类加载器通过类的全限定名找到并加载该类,触发类加载的 “加载 - 链接 - 初始化” 流程(见前文)。 - 启动主线程:初始化完成后,JVM 创建主线程(
main线程),执行初始类的main方法,标志着程序开始执行。
3. 启动阶段的关键特点
- 启动过程依赖 JVM 的配置参数(如堆大小
-Xms、垃圾回收器-XX:+UseG1GC等),这些参数会影响内存分配、执行引擎等核心组件的初始化。 - 若初始类加载失败(如类不存在、字节码损坏),JVM 会在启动阶段抛出错误并终止。