Android N 引入了一种包含编译、解释和 JIT(Just In Time)的混合运行时,以便在安装时间、内存占用、电池消耗和性能之间获得最好的折衷。
ART 是在 Android KitKat(译者注:Android 4.0)引入并在 Lollipop(译者注:Android 5.0)中设为默认解决方案的主要特性之一,是当时的一种新的运行时。ART 取代了 Dalvik,但是前者与后者仍然保持了字节码级的兼容,因为前者仍在运行 DEX 文件。ART 的主要特征之一就是安装时对应用的 AOT 编译。这种方式的主要优点就是优化产生的本地代码性能更好,执行起来需要更少的电量。劣势在于安装文件所需的空间和时间。在 Lollipop 和 Marshmallow(译者注:Android 6.0)中,大的应用需要数分钟才能安装完。
Android N 开发者预览版包含了一个混合模式的运行时。应用在安装时不做编译,而是解释字节码,所以可以快速启动。ART 中有一种新的、更快的解释器,通过一种新的 JIT 完成,但是这种 JIT 的信息不是持久化的。取而代之的是,代码在执行期间被分析,分析结果保存起来。然后,当设备空转和充电的时候,ART 会执行针对“热代码”进行的基于分析的编译,其他代码不做编译。为了得到更优的代码,ART 采用了几种技巧包括深度内联。
对同一个应用可以编译数次,或者找到变“热”的代码路径或者对已经编译的代码进行新的优化,这取决于分析器在随后的执行中的分析数据。这个步骤仍被简称为 AOT,可以理解为“全时段的编译”(All-Of-the-Time compilation)。
这种混合使用 AOT、解释、JIT 的策略的全部优点如下。
- 即使是大应用,安装时间也能缩短到几秒
- 系统升级能更快地安装,因为不再需要优化这一步
- 应用的内存占用更小,有些情况下可以降低 50%
- 改善了性能
- 更低的电池消耗
如果您想了解关于编译时优化的更多细节,我们推荐播客 Episode 45: State of the ART ,其中邀请了两位嘉宾——Android ART 团队的 leader Brian Carlstrom 和 Android 平台的工程总监 Anwar Ghuloum。
评论