【jvm】C1编译器

目录

          • [1. 说明](#1. 说明)
          • [2. 作用](#2. 作用)
          • [3. 特点](#3. 特点)
          • [4. 编译流程](#4. 编译流程)
          • [5. C1编译器与分层编译](#5. C1编译器与分层编译)
          • [6. C1编译器的相关参数](#6. C1编译器的相关参数)
1. 说明
  • 1.JVM(Java Virtual Machine)C1编译器是Java虚拟机中的一个即时编译器 (Just-In-Time Compiler,JIT),也称为Client Compiler
2. 作用
  • 1.将Java字节码转换为本地机器代码,以提高程序的执行效率。
  • 2.在运行时,JVM会动态地将经常执行的字节码编译为本地机器代码,这个过程包括对代码进行优化,以提高执行速度。
3. 特点
  • 1.快速启动:C1编译器关注局部性优化,生成的代码速度较快,但优化程度相对较低。这使得C1编译器非常适合于执行时间较短或对启动性能有要求的程序,如GUI应用等。
  • 2.简单优化:C1编译器会对代码进行一些基本的优化,如条件表达式消除、基本块消除、全局值编号(GVN)优化、数组范围检查消除和NULL检查消除等。这些优化有助于减少代码的大小和提高执行效率。
  • 3.平台无关性:C1编译器生成的中间表示(IR)具有平台无关性,这使得优化过程更加方便。在优化完成后,C1编译器会将高级中间表示(HIR)转换为低级中间表示(LIR),然后基于LIR进行寄存器分配和机器代码生成。
4. 编译流程
  • 1.字节码解析生成HIR:C1编译器首先会解析Java字节码,并生成高级中间表示(HIR)。HIR是由基本块构成的控制流图,基本块内部是SSA(Static Single Assignment)形式的指令序列。
  • 2.HIR优化:在生成HIR后,C1编译器会对其进行一系列优化,如条件表达式消除、基本块消除、GVN优化、数组范围检查消除和NULL检查消除等。
  • 3.HIR生成LIR:优化完成后,C1编译器会将HIR转换为低级中间表示(LIR)。
  • 4.线性扫描寄存器分配:基于LIR,C1编译器会进行线性扫描寄存器分配,将虚拟寄存器映射到物理寄存器上。
  • 5.机器代码生成:最后,C1编译器会生成本地机器代码,并将其放入nmethod中,以便JVM直接执行。
5. C1编译器与分层编译
  • 1.在Java 7中,引入了分层编译(Tiered Compilation)的概念。
  • 2.分层编译综合了C1编译器的启动性能优势和C2编译器的峰值性能优势。
  • 3.分层编译将编译过程分为多个层次,每个层次都对应不同的优化级别。
  • 4.第1层到第3层都使用C1编译器进行编译,但优化级别逐渐提高。
  • 5.第4层则使用C2编译器进行编译,启用更多耗时较长的优化。
  • 6.通过分层编译,JVM可以根据程序的运行情况动态地选择合适的编译路径,以达到最佳的性能表现。
  • 7.例如,在程序启动阶段,JVM可能会选择使用C1编译器进行快速编译;而在程序运行稳定后,则可能会选择使用C2编译器进行更深入的优化。
6. C1编译器的相关参数
  • 1.JVM提供了多个参数来控制C1编译器的行为。
  • 2.-client:强制指定JVM使用C1编译器。
  • 3.-XX:+TieredCompilation:开启分层编译(JDK 8之后默认开启)。
  • 4.-XX:TieredStopAtLevel=N:将分层编译停留在第N层。例如,-XX:TieredStopAtLevel=3表示仅使用C1编译器进行编译,而不使用C2编译器。
  • 5.-XX:+PrintCompilation:输出应用代码的编译细节,方便进行性能调优。
相关推荐
智商低情商凑6 小时前
CAS(Compare And Swap)
java·jvm·面试
Mr__Miss9 小时前
JVM学习笔记
jvm·笔记·学习
碎梦归途10 小时前
23种设计模式-结构型模式之适配器模式(Java版本)
java·开发语言·jvm·单例模式·设计模式·适配器模式
江沉晚呤时11 小时前
深入了解递归、堆与栈:C#中的内存管理与函数调用
java·jvm·算法
银河麒麟操作系统14 小时前
【银河麒麟高级服务器操作系统】磁盘只读问题分析
java·linux·运维·服务器·jvm
爱的叹息14 小时前
Java虚拟机(JVM)家族发展史及版本对比
java·开发语言·jvm
左灯右行的爱情1 天前
深度学习与总结JVM专辑(七):垃圾回收器—CMS(图文+代码)
jvm
碎梦归途1 天前
23种设计模式-结构型模式之享元模式(Java版本)
java·开发语言·jvm·设计模式·享元模式
左灯右行的爱情1 天前
JVM-卡表
java·jvm·算法
程序猿chen1 天前
JVM考古现场(二十五):逆熵者·时间晶体的永恒之战(进阶篇)
java·jvm·git·后端·程序人生·java-ee·改行学it