【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:输出应用代码的编译细节,方便进行性能调优。
相关推荐
李长渊哦5 小时前
常用的 JVM 参数:配置与优化指南
java·jvm
数巨小码人9 小时前
QT SQL框架及QSqlDatabase类
jvm·sql·qt
martian66518 小时前
【Java高级篇】——第16篇:高性能Java应用优化与调优
java·开发语言·jvm
李长渊哦1 天前
Java 虚拟机(JVM)方法区详解
java·开发语言·jvm
二十七剑1 天前
jvm中各个参数的理解
java·jvm
七禾页话1 天前
垃圾回收知识点
java·开发语言·jvm
小梁不秃捏2 天前
深入浅出Java虚拟机(JVM)核心原理
java·开发语言·jvm
xiaolingting2 天前
JVM层面的JAVA类和实例(Klass-OOP)
java·jvm·oop·klass·instanceklass·class对象
神仙别闹3 天前
基于Python+Sqlite实现的选课系统
jvm·python·sqlite
上分小子2.03 天前
jvm-Java虚拟机
java·开发语言·jvm