JVM虚拟机即时编译与提前编译

本文探讨了Java虚拟机中的即时编译(JIT)与提前编译(AOT)两种技术。JIT在运行时将热点代码编译为本地机器码,提升执行效率,而AOT则在编译期间完成,减少了预热时间,但可能牺牲了平台独立性和动态性。两者各有优劣,适用于不同的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

即时编译JIT

目前主流的两款商用Java虚拟机(HotSpot、OpenJ9)里,Java程序最初都是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或者代码块的运行特别频繁,就会把这些代码认定为“热点代码”(Hot Spot Code),为了提高代码的执行效率,在运行时,虚拟机将会把这些代码编译成本地机器码,并以各种手段尽可能地进行代码优化,这个过程称为即时编译。

提前编译AOT

提前编译是相对于即时编译的概念,提前编译能带来的最大的好处是Java虚拟机加载这些已经预编译成二进制库之后就能直接调用,而无须再等待即时编译器在运行时将其编译成二进制机器码。理论上,提前编码可以减少即时编译带来的预热时间,减少Java应用长期给人带来的“第一次运行慢”的不良体验。坏处很明显,它破坏了Java“一次编写,到处运行”的承诺,必须为每个不同的操作系统、硬件去编译对应的发行包;也显著降低了Java链接过程的动态性,必须要求加载的代码在编译期就是全部已知的,而不能在运行期才确定,否则就只能舍弃掉已经提前编译好的版本,退回到原来的即时编译执行状态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹氿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值