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. 运行时直接执行编译后的本地代码
内存管理[编辑 | 编辑源代码]
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改进内存分配器