在新的 Android 版本里(实际上是从 Android 5.0 Lollipop,大约 2014 年开始),Dalvik 虚拟机已经被完全取代了。
现在 Android 系统使用的是 ART。
ART 是什么呢?
ART 的全称是 Android Runtime (Android 运行时)。它就是现在负责运行你的 Android 应用程序代码的那个“引擎”或者说“环境”。你可以把它理解为升级版的 Dalvik。
ART 和 Dalvik 最主要的区别在于它们处理应用程序代码的方式:
1. Dalvik (过去时)
- 它主要使用一种叫做 JIT (Just-In-Time,即时编译) 的技术。
- 这就像一个“同声传译员”:当你运行 App 时,Dalvik 会在你需要执行某段代码的那一刻,才临时把它从 Android 的字节码(DEX 格式)翻译成机器能懂的指令。
- 优点:安装 App 快,占用的存储空间相对小。
- 缺点:每次运行 App 时都需要进行一些即时翻译工作,所以 App 启动和运行过程中可能会感觉慢一点,也更耗电一些。
2. ART (现在时)
- 它主要采用一种叫做 AOT (Ahead-Of-Time,预先编译) 的技术。
- 这更像一个“提前翻译好整本书的翻译家”:在你安装 App 的时候(或者在手机空闲、充电的时候),ART 就会提前把 App 的大部分甚至全部代码从字节码(DEX)一次性翻译成机器能直接执行的本地机器码(通常是 OAT 文件)。
- 优点:因为代码大部分都提前翻译好了,所以 App 启动更快,运行更流畅,执行效率更高,通常也更省电。
- 缺点:App 安装时间会变长一些,并且翻译好的机器码会占用更多的存储空间。
现代 ART 更智能
值得一提的是,现在的 ART 其实变得更聪明了,它并不仅仅是纯粹的 AOT。它结合了多种技术的优点:
- AOT:在安装时或系统空闲时,对常用代码进行预编译。
- JIT:对于不常用的代码,或者为了在开发调试时更快看到效果,ART 仍然可以进行即时编译。
- Profile-Guided Compilation (PGC,配置文件引导编译):ART 会在 App 运行时“观察”哪些代码路径(Hot Paths)被最频繁地使用,然后把这些信息记录在一个“配置文件”里。在手机空闲和充电时,ART 会根据这个配置文件,对那些最热的代码路径进行更深度的优化和 AOT 编译,让它们跑得更快!
总结
- Dalvik 虚拟机已经是过去式了,从 Android 5.0 开始就被 ART 取代。
- ART (Android Runtime) 是当前 Android 的运行时环境。
- ART 主要通过 AOT (预先编译) 技术,在 App 安装时就把代码翻译成机器码,从而让 App 启动更快、运行更流畅、更省电。
- 现代 ART 采用 AOT + JIT + PGC 的混合模式,力求在安装时间、存储空间、启动速度和运行性能之间取得最佳平衡。
Zygote 预加载类库等操作,现在都是在 ART 这个运行时环境里进行的。