目录
- 1. 说明
- 2. 主要特点
- 2.1 C1编译器
- 2.2 C2编译器
- 3. 编译过程与优化策略
- 3.1 C1编译器
- 3.3 C2编译器
- 4. 分层编译与协作机制
- 5. 性能影响与选择
1. 说明
- 1.JVM(Java虚拟机)中的C1编译器和C2编译器是两种不同的即时编译器(JIT Compiler),它们各自具有独特的特点和适用场景。
2. 主要特点
2.1 C1编译器
- 1.Client Compiler。
- 2.编译速度较快。
- 3.优化程度较低,注重局部优化。
- 4.生成代码质量一般。
- 5.适用于执行时间较短或启动性能要求高的程序。
2.2 C2编译器
- 1.Server Compiler。
- 2.编译速度较慢。
- 3.优化程度较高,注重全局优化。
- 4.生成代码质量较高,执行效率更高。
- 5.适用于执行时间较长或峰值性能要求高的程序。
3. 编译过程与优化策略
3.1 C1编译器
- 1.编译速度快,生成的代码速度也相对较快。
- 2.主要进行简单的、可靠的优化,如方法内联、类型检查消除等。
- 3.适用于对启动性能有较高要求的程序,如GUI应用等。
3.3 C2编译器
- 1.编译速度慢,但生成的代码质量高,执行效率高。
- 2.进行更深入的优化,包括基于性能监控信息的激进优化。
- 3.适用于长时间运行的服务器端应用程序,以提供稳定的高性能。
4. 分层编译与协作机制
- 1.从Java 7开始,JVM引入了分层编译机制,使得C1和C2编译器能够协同工作。
- 2.在分层编译中,整个优化过程被划分为多个层次,每个层次对应不同的编译策略和优化级别。
- 3.C1编译器通常负责前几个层次的编译任务,进行简单的优化。
- 4.当代码执行次数达到一定阈值时,C2编译器会接手进行更深层次的优化。
5. 性能影响与选择
- 1.C1编译器:由于编译速度快且生成的代码相对较小,因此启动性能较好。但长期运行时的性能可能不如C2编译器。
- 2.C2编译器:虽然编译速度慢且生成的代码较大,但长期运行时的性能优越。适用于需要高性能和稳定性的场景。