【jvm】C1编译器

embedded/2024/12/4 15:24:24/

目录

          • 1. 说明
          • 2. 作用
          • 3. 特点
          • 4. 编译流程
          • 5. 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:输出应用代码的编译细节,方便进行性能调优。

http://www.ppmy.cn/embedded/142931.html

相关文章

【方案三】JAVA中使用ocr(Umi-OCR)

目录 前言: 需求: 代码: 难点: 参考文档: 前言: 前两个方案都是自己做着玩儿的,实际运用到上线项目是要收费的,该方案使用的是免费开源的工具,就算运用到商业项目也…

服务发布策略:包括蓝绿部署、A/B测试以及金丝雀发布

原文地址:https://help.aliyun.com/zh/mse/use-cases/service-release-strategies?spma2c4g.11186623.help-menu-123350.d_3_2_3.460a525dLQbFlG&scm20140722.H_375329._.OR_help-T_cn#DAS#zh-V_1 蓝绿部署 蓝绿部署需要对服务的新版本进行冗余部署,一般新版…

Github提交Pull Request教程 Git基础扫盲(零基础易懂)

1 PR是什么? PR,全称Pull Request(拉取请求),是一种非常重要的协作机制,它是 Git 和 GitHub 等代码托管平台中常见的功能,被广泛用于参与社区贡献,从而促进项目的发展。 PR的整个过…

滑动窗口最大值

滑动窗口最大值 1、题目描述2、解答思路 1、题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 2、解答思路 本题需要…

Ubuntu 20.04 下 ROS 工作空间的详解与应用

Ubuntu 20.04 下 ROS 工作空间的详解与应用 在机器人操作系统(ROS, Robot Operating System)生态系统中,工作空间(Workspace)是开发和管理ROS包(Package)的核心环境。对于使用Ubuntu 20.04的开…

C 语言 “神秘魔杖”—— 指针初相识,解锁编程魔法大门(一)

文章目录 一、概念1、取地址操作符(&)2、解引用操作符(*)3、指针变量1、 声明和初始化2、 用途 二、内存和地址三、指针变量类型的意义1、 指针变量类型的基本含义2、 举例说明不同类型指针变量的意义 四、const修饰指针1、co…

Windows远程桌面连接到Linux

我的电脑是一台瘦客户端,公司设置的不能安装其他软件,里面只有几个软件,还好有一个远程桌面(Remote Desktop Connection),我想连接到另一台Linux的电脑上。 在Linux上安装xrdp: sudo apt insta…

hhdb数据库介绍(10-32)

管理 数据归档 数据归档支持对对于日志流水类型的表,按照时间定期对历史数据进行归档,转储非生产存储,清理生产历史数据,同时支持对归档数据进行实时查询。 数据归档规则列表展示了每条规则的详情信息,包括&#xf…