Java 中的编译器分为哪些类型?

本文介绍了Java的三种编译器类型:前端编译器(如Javac和ECJ)将.java转为.class,JIT(Just-In-Time)编译器如Hotspot的C1、C2和Graal进行运行时优化,AOT(Ahead-Of-Time)编译器如Jaotc则直接生成目标机器代码。Java的语法糖和编译器优化对于程序性能和编码体验至关重要。
摘要由CSDN通过智能技术生成

写在前面

本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定Java虚拟机

解答

按照《深入理解Java虚拟机:JVM高级特性与最佳实践第3版》的说法,Java 语言的编译器可以分为 3 类:

前端编译器

作用

把 java 文件转变成 class 文件

举例

JDK 的 Javac、 Eclipse JDT中的增量式编译器(ECJ)

JIT编译器(Just In Time Compiler)

作用

把字节码转变成机器码

举例

Hotspot VM的C1、C2编译器,Graal 编译器

AOT编译器

作用

直接把程序编译成与目标机器指令集相关的二进制代码

举例

JDK 的 Jaotc、GNU Compiler for the Java(GCJ)、 Excelsior JET

对比

前端编译器对代码的运行效率几乎没有任何优化措施。

虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,这样可以让那些不是由 Javac产生的Cass文件(如 Scala、 Groovy等语言的 Class 文件)也同样能享受到编译器优化所带来的好处。

相当多新生的Java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持,可以说,Java中即时编译器在运行期的优化过程对于程序运行来说更重要,

而前端编译器在编译期的优化过程对于程序编码来说关系更加密切。

关于 Java 的语法糖请参考我的这篇博客——全网最全的 Java 语法糖指南

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值