Java虚拟机(Java Virtual Machine,简称JVM)是执行Java程序的引擎。JVM架构和运行原理如下:
JVM架构
JVM的架构主要由以下几个部分组成:
1. 类加载子系统
负责将.class文件加载到内存中,并为其生成对应的Class对象。类加载器分为启动类加载器、扩展类加载器和应用程序类加载器。
2. 运行时数据区
- **方法区(Method Area)**:存储已被JVM加载的类信息、常量、静态变量、即时编译后的代码等数据。它是所有线程共享的内存区域。
- **堆(Heap)**:存储所有对象实例和数组,堆也是线程共享的内存区域。
- **Java栈(Java Stack)**:每个线程都有自己的栈,栈中保存局部变量、操作数栈、动态链接和方法出口等信息。
- **本地方法栈(Native Method Stack)**:与Java栈类似,不过本地方法栈是为虚拟机使用的native方法服务的。
- **程序计数器(Program Counter Register)**:每个线程都有一个程序计数器,用于指示当前线程执行到哪一个字节码指令。
3. 执行引擎
- **解释器(Interpreter)**:将字节码解释为机器码逐条执行。
- **即时编译器(Just-In-Time Compiler, JIT)**:将频繁执行的字节码编译为机器码以提高执行效率。
- **垃圾收集器(Garbage Collector, GC)**:负责回收不再使用的对象,以释放内存。
JVM运行原理
按照JVM架构,按顺序描述JVM的运行原理如下:
1. 启动JVM
当一个Java程序启动时,JVM会首先启动。启动JVM的过程中会进行以下步骤:
- 创建和初始化虚拟机。
- 启动主线程(通常是调用`public static void main(String[] args)`方法)。
2. 类加载过程
类加载子系统负责将Java类加载到内存中,这个过程包括三个主要步骤:加载、连接和初始化。
#### 2.1 加载
- **加载(Loading)**:查找和导入类的二进制数据(.class文件),将其读入内存,并生成对应的Class对象。
#### 2.2 连接
- **验证(Verification)**:确保导入的类文件的字节码符合JVM规范,保证程序的安全性。
- **准备(Preparation)**:为类的静态变量分配内存,并将其初始化为默认值。
- **解析(Resolution)**:将类、接口、字段和方法的符号引用转换为直接引用。
#### 2.3 初始化
- **初始化(Initialization)**:执行类构造器`<clinit>`方法,对类的静态变量进行初始化,并执行静态代码块。
3. 运行时数据区分配
JVM在运行时会分配不同的数据区,以支持程序的运行:
- **方法区(Method Area)**:存储已加载的类信息、常量、静态变量和即时编译后的代码。
- **堆(Heap)**:存储所有的对象实例和数组,是垃圾收集的主要区域。
- **Java栈(Java Stack)**:每个线程都有自己的栈帧,用于存储局部变量、操作数栈和方法返回地址。
- **本地方法栈(Native Method Stack)**:为使用本地方法服务。
- **程序计数器(Program Counter Register)**:记录当前线程正在执行的字节码指令地址。
4. 执行引擎运行
执行引擎负责解释或编译Java字节码,并执行对应的机器码。
#### 4.1 解释执行
- **解释器(Interpreter)**:逐条解释字节码指令,将其转换为机器码并执行。
#### 4.2 即时编译
- **即时编译器(Just-In-Time Compiler, JIT)**:将热点代码编译为本地机器码,以提高执行效率。
5. 方法调用和执行
当方法被调用时,会创建新的栈帧并将其压入线程的Java栈。方法执行完毕后,栈帧弹出,返回调用方法。
6. 垃圾收集
JVM自动进行垃圾收集,以回收不再使用的对象。垃圾收集器通过各种算法(如标记-清除、标记-整理、复制算法)进行内存管理。
7. 异常处理
JVM有完善的异常处理机制,当程序运行中出现异常时,JVM会捕获并处理异常,保证程序的健壮性。异常处理机制包括捕获、处理和抛出异常。
8. 本地方法调用
JVM通过Java本地接口(JNI)调用本地方法(如C/C++编写的代码),以实现与操作系统和硬件的交互。
9. 程序结束
当主线程结束时,其他所有非守护线程(即主要线程,也就是非辅助线程,比如垃圾回收,监控等)也会结束,JVM关闭。程序的结束可能是因为main方法执行完毕或调用System.exit()方法。
通过以上步骤,JVM高效地执行Java程序,提供平台独立性和自动内存管理等特性。