Java程序的生命周期包括:编译期、加载期、运行期和结束期4个阶段。
- 编译期:将Java源文件编译成字节码文件(.class文件)的过程。编译器(javac)将校验源代码的语法和语义,并翻译成字节码。
- 加载期:虚拟机加载字节码文件,生成Class对象的过程。它包括加载、验证、准备和解析4个步骤。
- 加载:读取字节码文件,生成Class对象。
- 验证:校验字节码文件是否符合JVM规范。
- 准备:为类变量分配内存空间,并设置默认初始值。
- 解析:将类中的符号引用(方法名、变量名)替换为直接引用。
- 运行期:运行Java程序逻辑,可以反复执行。它包括初始化阶段和使用阶段两个阶段。
- 初始化:给类变量赋予开发者定义的初始值。只执行一次。
- 使用:执行方法调用,访问变量等程序逻辑。可以反复执行。
- 结束期:JVM执行System.exit()方法或程序执行完毕,进行堆内存回收和清理工作的过程。
来看一个简单例子:
public class LifeCycleDemo {
public static void main(String[] args) {
// 编译期:javac LifeCycleDemo.java
// 加载期:虚拟机加载LifeCycleDemo.class文件
// 初始化阶段:给变量初始化
int count = 0;
// 使用阶段:程序执行主逻辑
for (int i = 0; i < 5; i++) {
count++;
System.out.println(count);
}
// 结束期:虚拟机调用GC回收内存资源
}
}
可以看到Java程序从源码到运行都经历了完整的生命周期,这其中涉及Java的编译器、类加载器、垃圾回收器等机制的工作。
所以,理解Java程序的生命周期过程可以让我们更深入理解Java平台的工作机制,有助于我们定位和解决程序运行期出现的各种问题。