在Marshmallow,有一个AOT编译器添加了ART.来自Android N的另一个编译器JIT另外添加了AOT.
我的问题是什么是AOT编译器特定的作业/功能以及什么是JIT编译器作业/功能.
解决方法:
在Android Java类中转换为DEX字节码.
DEX字节码格式通过ART或Dalvik运行时转换为本机机器码.
Dalvik is a JIT (Just in time) compilation based engine. There were
drawbacks to use Dalvik hence from Android 4.4 (kitkat) ART was
introduced as a runtime and from Android 5.0 (Lollipop) it has
completely replaced Dalvik. Android 7.0 adds a just-in-time (JIT)
compiler with code profiling to Android runtime (ART) that constantly
improves the performance of Android apps as they run.
(Dalvik使用JIT(及时)编译,而ART使用AOT(Ahead of time)编译.)
及时(JIT):
使用Dalvik JIT编译器,每次运行应用程序时,它都会动态地将Dalvik字节码的一部分转换为机器代码.随着执行的进行,编译和缓存更多的字节码.由于JIT仅编译代码的一部分,因此它具有较小的内存占用并且在设备上使用较少的物理空间.
提前(AOT):
ART配备了Ahead-of-Time编译器.在应用程序的安装阶段,它会将DEX字节码静态转换为机器代码并存储在设备的存储中.这是在设备上安装应用程序时发生的一次性事件.
Android N包含一个混合运行时:
安装过程中不会有任何编译,应用程序可以立即启动,
字节码被解释. ART中有一个新的,更快的解释器,它伴随着一个新的JIT,但JIT信息不会持久存在.
而是在执行期间对代码进行分析,并保存结果数据.
ART的好处:
>在安装过程中完成DEX字节码转换后,应用程序运行得更快.
>直接执行本机代码,减少应用程序的启动时间.
>提高电池性能,因为用于逐行解释字节代码的功率得以保存.
>改进垃圾收集器.
ART的缺点:
>由于在安装过程中将DEX字节码转换为机器代码,因此App安装需要更多时间.
>由于安装时生成的本机代码存储在内部存储中,因此需要更多内部存储.
标签:android,jit,android-6-0-marshmallow,android-7-0-nougat
来源: https://codeday.me/bug/20190611/1218645.html