华为方舟编译器深度解读 颠覆安卓体验就靠它( 三 )

图片来自网络

Android 5.0时代 , Dalvik虚拟机升级到了ART , JIT编译器也“升级”到了AOT , 即用户在下载APP到手机安装时候 , 就直接可以把编译的代码直接编译成机器语言 , 当然还有部分没有编译的代码 , 这个就在用户启动APP时候再使用解释器来编译 。 虽然比1.0运行效率要高 , 但是牺牲了安装时间 。

到Android 7.0时代 , 为了解决安装时间过长问题 , 采用了混合编译机制 , 即在安装APP时候不编译中间代码 , 而是等APP空闲下来时 , 先通过AOT静态编译出一部分机器代码 。 如果AOT环境下遇到问题 , 再激发JIT编译器+解释器进行“辅助” 。

图片来自网络

但是上述的代价 , 就是需要大量运行内存和不断的高存储写入 , 进而增加功耗和发热 。 而华为干掉虚拟机 , 其实就是将Java代码直接编译成010101的机器码 。 但是大家要明白 , Java语言里有静态语义和动态语义 , 大多数的动态语义 , java无法做到直接编译还得交给虚拟机 。

推荐阅读