Thread

对于dalvik虚拟机而言其检测到执行频率较高的函数时就会进行jit编译将其编译为本地机器码,这样下次此函数执行的时候就会直接执行编译后的机器码,编译后的机器码只存在于内存中并不会以文件的形式保存,app重启后此函数依然会以解释模式执行。在JIT编译函数生成机器码的同时还会生成配置文件profile记录热点函数信息,供AOT守护进程使用编译生成oat文件,以提速执行。
以下为JIT工作流:

但在我们测试中 AE 无论运行多少次启动阶段依然有JIT的运行,但TEMU在启动阶段JIT是无执行的,判断TEMU已做了AOT优化。
AOT事前编译,即在代码运行前进行编译。对于android 7.0之前的art虚拟机而言其会在apk安装的过程中利用dex2oat程序将apk中的dex文件编译为本地机器指令并保存为oat文件,这样在apk启动时直接加载此oat文件并运行,提高了程序了执行效率。但是因为他需要在apk安装的时候使用dex2oat程序进行编译,所以增加了apk在安装过程中的时间。
通过AOT优化的中端机有100ms收益
该优化需要对APP内所有工程做改造,升级AGP后,进行BaselineProfile优化