java c1_JIT中的C1和C2编译器

Compilation Modes

Inside Java HotSpot VM, there are actually two separate JIT compiler modes, which are known as C1 and C2. C1 is used for applications where quick startup and rock-solid optimization are required; GUI applications are often good candidates for this compiler. C2, on the other hand, was originally intended for long-running, predominantly server-side applications. Prior to some of the later Java SE 7 releases, these two modes were available using the -client and -server switches, respectively.

The two compiler modes use different techniques for JIT compilation, and they can output very different machine code for the same Java method. Modern Java applications, however, can usually make use of both compilation modes. To take advantage of this fact, starting with some of the later Java SE 7 releases, a new feature called tiered compilation became available. This feature uses the C1 compiler mode at the start to provide better startup performance. Once the application is properly warmed up, the C2 compiler mode takes over to provide more-aggressive optimizations and, usually, better performance. With the arrival of Java SE 8, tiered compilation is now the default behavior.

参考:

http://www.oracle.com/technetwork/articles/java/architect-evans-pt1-2266278.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以把编译器分为两类:C1编译器C2编译器C1编译器是一种高级的编译器,它能够将源代码编译为机器语言。它通常用于编译大型程序。C2编译器是一种轻量级的编译器,它可以将源代码编译为可执行文件。它通常用于编译小型程序。 ### 回答2: C1编译器C2编译器是两个常见的C语言编译器,它们在一些方面有所不同。 首先,C1编译器是一种基于传统经典的编译技术的编译器。它通常采用单遍扫描的方式进行编译,并且在编译过程生成目标代码。C1编译器的优点在于编译速度较快,适用于一些较为简单的项目和资源有限的环境。然而,由于其编译过程相对简单,生成的目标代码质量可能相对较低,可能存在一些性能上的损失。 而C2编译器则是更现代化和高级的编译器。它采用多遍扫描的方式进行编译,并且在编译过程进行一系列的优化。C2编译器能够更好地分析代码,对程序进行静态检查,并生成更高效的目标代码。因此,C2编译器的优点在于生成的目标代码质量较高,程序性能通常更好。但是,由于其编译过程相对复杂,所以编译速度可能较慢。 此外,C2编译器通常支持更多的C语言标准和扩展,以及更多的优化选项。它还可能支持更多的目标平台,如不同的处理器架构和操作系统。C2编译器通常具有更丰富的功能和更好的兼容性,适合用于开发大型复杂项目和追求最佳性能的应用。 综上所述,C1编译器C2编译器在编译原理和性能上有所不同。选择使用哪个编译器取决于项目的要求和限制,以及开发者对性能和功能的需求。 ### 回答3: C1编译器C2编译器是两个不同的编译器,它们在编译过程有一些区别。 首先,C1编译器是Sun Microsystems的一个开发项目,它是Java虚拟机(JVM)的一个部分。C1编译器主要负责在运行时将字节码(Java源代码的间表示形式)转换为本地机器代码。C1编译器的目标是快速编译,以便在短时间内生成本地机器代码,但生成的代码质量相对较低。 而C2编译器也是Java虚拟机的一部分,它是JIT(即时编译器)的一部分。C2编译器通过将热门的字节码转换成高效的本地机器代码来优化Java应用程序的性能。C2编译器采用了更高级的优化技术,包括代码内联、死代码消除、循环优化等,以生成更高质量的本地代码。C2编译器在编译过程需要更长的时间来进行优化,并且会占用更多的内存。 总之,C1编译器C2编译器Java虚拟机两个不同的编译器C1编译器主要用于快速编译生成本地代码,但生成的代码质量较低;而C2编译器则通过更高级的优化技术生成更高质量的本地代码,但编译过程需要更长时间和更多内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值