【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:输出应用代码的编译细节,方便进行性能调优。
相关推荐
极客先躯4 分钟前
高级java每日一道面试题-2024年12月03日-JVM篇-什么是Stop The World? 什么是OopMap? 什么是安全点?
java·jvm·安全·工作原理·stop the world·oopmap·safepoint
优雅的落幕1 小时前
多线程---线程安全(synchronized)
java·开发语言·jvm
锵锵锵锵~蒋2 小时前
实时数据开发|Flink异步IO--提升性能和吞吐量
jvm·数据库·flink·实时数据开发
我只有一岁半11 小时前
JVM 之垃圾回收器
jvm
哥谭居民000111 小时前
多线程运行时,JVM(Java虚拟机)的内存模型
jvm
飞滕人生TYF12 小时前
JVM 内存结构 详解
jvm·内存结构
杨荧17 小时前
【开源免费】基于Vue和SpringBoot的水果购物网站(附论文)
前端·javascript·jvm·vue.js·spring boot·spring cloud·开源
王佑辉17 小时前
【jvm】什么是垃圾
jvm
杨荧17 小时前
【开源免费】基于Vue和SpringBoot的服装生产管理系统(附论文)
前端·javascript·jvm·vue.js·spring boot·spring cloud·开源
码农爱java19 小时前
JVM 性能调优 -- JVM 调优常用网站
jvm·原理·调优·jvm 调优·gc 日志·gc 分析