安卓原生虚拟机是Android操作系统核心组件之一,负责运行Android应用程序,自Android 4.4(KitKat)起,谷歌将默认虚拟机从Dalvik替换为ART(Android Runtime),两者均基于Java语言特性,但实现机制和性能表现差异显著。
特性 | Dalvik | ART |
---|---|---|
首次亮相版本 | Android 1.0(2008) | Android 4.4(2013) |
编译方式 | 纯解释执行(JIT编译可选) | 提前编译(AOT)+ 运行时优化 |
启动速度 | 较慢(每次启动需解释字节码) | 较快(直接执行预编译本地代码) |
内存占用 | 较低(无需存储预编译文件) | 较高(需存储编译后的本地代码) |
垃圾回收 | 基于Card Table的标记-清理算法 | 引入Space Compacting优化内存碎片 |
性能特点 | 低功耗但执行效率低 | 高执行效率,接近原生性能 |
.dex
文件 → 字节码解释执行 → (可选JIT编译为本地代码)→ 硬件执行 .dex
文件 → AOT编译为本地机器码 → 直接执行 → 运行时动态优化 场景 | 优化手段 |
---|---|
应用启动加速 | 减少Zygote初始化时间,预加载必要资源 |
内存管理 | 控制对象创建频率,避免频繁GC触发 |
耗电优化 | 利用ART的AOT编译减少运行时CPU负载 |
多核调度 | 通过JNI调用释放关键任务到原生库处理 |
原因:ART对Java语义的严格校验(如访问权限、类型检查)
解决方案:
android.support
库替代过时API 原因:AOT编译生成的本地代码会存储在设备中
解决方案:
minifyEnabled
压缩代码 A:ART通过AOT编译提前将字节码转换为本地机器码,大幅提升执行效率,同时引入更先进的垃圾回收算法和内存管理机制,显著降低运行时卡顿概率,ART支持更严格的Java语义校验,提升应用兼容性。
A: