Java虚拟机(JVM)的生命周期
Java虚拟机(JVM)的生命周期涵盖了从启动到退出的整个过程,包括以下几个主要阶段:
-
启动 (Startup)
- JVM的启动通常是由用户执行一个Java应用程序开始的,例如通过命令行输入
java [类名]或调用API启动。 - 启动过程中,操作系统创建一个新的进程,并加载特定实现的JVM实例。引导类加载器(Bootstrap Class Loader)首先加载核心Java类库(如
rt.jar),然后根据指定的主类(包含main()方法的类)找到并加载这个类。 - JVM初始化内存区域和子系统,如堆、栈、方法区等。
- JVM的启动通常是由用户执行一个Java应用程序开始的,例如通过命令行输入
-
类加载与初始化 (Class Loading and Initialization)
- 当JVM需要使用某个类时,类加载机制会启动,按照双亲委派模型加载对应的字节码文件(
.class文件)到方法区中。 - 类的生命周期包括:加载(查找并读取类的二进制数据)、验证(确保类信息符合JVM规范且不危害虚拟机安全)、准备(为静态变量分配内存并初始化默认值)、解析(将符号引用转换为直接引用)、初始化(执行类初始化代码,即static块和静态字段赋值)。
- 当JVM需要使用某个类时,类加载机制会启动,按照双亲委派模型加载对应的字节码文件(
-
程序执行 (Program Execution)
- 一旦主类加载完毕,其
main()方法会被调用,标志着程序开始正式运行。 - 程序中的所有线程都在JVM内部管理,包括主线程和其他由主线程或其他线程创建的线程。
- 执行引擎负责解释或编译字节码指令,并在不同的内存区域之间进行操作,如创建对象、执行方法调用、处理异常等。
- 一旦主类加载完毕,其
-
垃圾回收 (Garbage Collection)
- 在整个JVM生命周期内,垃圾回收器持续监控堆内存,自动回收不再使用的对象所占用的空间。
- 对象的可达性分析、分代收集策略等是垃圾回收机制的重要组成部分。
-
终止 (Termination)
- 当程序的所有非守护线程都终止或者调用了System.exit()方法时,JVM进入终止阶段。
- 此阶段JVM会做一些清理工作,如释放剩余资源、关闭线程、执行finalization(如果有未被GC回收的对象需要终结)等。
- 清理完毕后,JVM进程结束,生命周期随之结束。
-
监控与诊断 (Monitoring and Diagnostics)
- 在JVM运行过程中,可以使用各种工具(如jps、jstack、jmap、jconsole等)来监控和诊断JVM的运行状态,包括内存使用情况、线程状态、类加载信息等。
了解JVM的生命周期有助于开发者优化程序性能、调试问题以及深入理解Java平台的底层工作机制。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 From Zero to Hero!