跳转到内容

ART (运行时环境)

ART(全称:Android Runtime)是Android操作系统自5.0版本(Lollipop)起采用的默认运行时环境,用于替代原先的Dalvik虚拟机。ART通过预先编译(Ahead-Of-Time,AOT)技术显著提升了Android应用的执行效率。

概述[编辑 | 编辑源代码]

ART是Google为优化Android性能而设计的运行时环境,主要特点包括:

  • 采用AOT编译取代JIT(Just-In-Time)编译
  • 改进的垃圾回收机制
  • 更低的内存占用
  • 更好的电池续航表现
  • 完全兼容Dalvik的DEX字节码格式

与Dalvik不同,ART在应用安装时就将DEX字节码编译为本地机器码,而不是在运行时解释执行。这种设计带来了显著的性能提升,但也增加了应用安装时间和存储空间占用。

技术架构[编辑 | 编辑源代码]

编译过程[编辑 | 编辑源代码]

ART的编译流程如下: 1. 开发者编写Java/Kotlin代码 2. 代码被编译为DEX字节码 3. 安装时,ART将DEX编译为本地机器码(ELF格式) 4. 运行时直接执行编译后的本地代码

Java/Kotlin源码
DEX字节码
ART AOT编译
本地机器码
直接执行

内存管理[编辑 | 编辑源代码]

ART改进了垃圾回收机制:

  • 并行垃圾回收
  • 更少的暂停时间
  • 分代收集策略
  • 针对大内存设备的优化

性能比较[编辑 | 编辑源代码]

下表对比了ART与Dalvik的主要性能指标:

指标 Dalvik ART
启动时间 较慢 快15-30%
存储占用 较小 大10-20%
电池消耗 较高 降低10-15%
执行效率 解释执行 本地代码执行

开发者适配[编辑 | 编辑源代码]

开发者通常无需特别适配ART环境,但需要注意:

兼容性[编辑 | 编辑源代码]

优化建议[编辑 | 编辑源代码]

// 避免在循环中创建短生命周期对象
void optimizeMemory() {
    // 不好的实践
    for(int i=0; i<1000; i++) {
        String temp = new String("item"+i);
    }
    
    // 更好的实践
    StringBuilder builder = new StringBuilder();
    for(int i=0; i<1000; i++) {
        builder.setLength(0);
        builder.append("item").append(i);
    }
}

历史版本[编辑 | 编辑源代码]

  • 2014年:Android 5.0首次引入ART作为默认运行时
  • 2016年:Android 7.0引入混合AOT/JIT编译模式
  • 2018年:Android 9.0优化垃圾回收策略
  • 2020年:Android 11改进内存分配器

参见[编辑 | 编辑源代码]