android将引入aot编译器,JIT与AOT编译模式

本文介绍了Android系统中JIT(Just-In-Time)和AOT(Ahead-Of-Time)两种编译模式。JIT在2.2版本引入,用于提升程序执行效率,仅编译热点代码。AOT自4.4版本开始,应用安装时完成编译,提高执行效率但延长安装时间。Android 7.0采用混合模式,结合JIT、AOT和解释器,提供更快安装速度和执行效率。

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

JIT,即Just-in-time,动态(即时)编译,边运行边编译;

AOT,Ahead Of Time,指运行前编译,是两种程序的编译方式

JIT

​ JIT,即“Just In Time”,翻译过来就是“即时编译技术”。android在2.2版本引入此技术,主要是用来提高程序的执行效率的。 对于会多次执行到的代码(比如某个类的函数、某一个经常使用到的执行路径相关的代码,就是所谓的“热点函数”、“热点trace”),JIT会将其编译成机器码。下次再执行此代码时就直接执行机器码,从而提高了代码的执行效率。

为什么只是对热点函数、热点trace进行JIT编译,而不是全部的字节码?首先,字节码的大部分代码一般不会总是执行到(即执行频率低),而JIT是在程序运行期间编译,编译时又需要时间,在程序运行期间花时间编译一般不会执行到的代码,这不是一个好的选择。所以,JIT只编译热点函数、热点trace,对于非热点的代码仍旧在用到时用解释器去解释成机器码然后执行就可以了。 JIT编译而来的机器码是存储到内存中的,不是在硬盘上。所以,在应用重新启动时,所有的热点代码也都需要使用jit重新编译成机器码。

网上找到一段关于JIT在代码层面实现逻辑的说明,“每启动一个应用程序,都会相应地启动一个dalvik虚拟机,启动时会建立JIT线程,一直在后台运行。当某段代码被调用时,虚拟机会判断它是否需要编译成机器码,如果需要,就做一个标记,JIT线程不断判断此标记,如果发现被设定就把它编译成机器码,并将其机器码地址及相关信息放入entry table中,下次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值