Android虚拟机演化
下表是我了解到的Android虚拟机演变过程.
VM | Runtime | Android版本 | 说明 |
---|---|---|---|
Dalvik | Interpreter | Android 2.2以前 | 慢, 卡顿 |
Dalvik | Interpreter + JIT | Android 2.x/4.x | 性能有所提升,仍慢,卡顿且耗电 |
ART | Interpreter + AOT(Quick) | Android 5.x | 性能大幅提升,但安装更新慢/占用存储多 |
ART | Interpreter + AOT(Quick + Optimizing) | Android 6.x | 性能继续提升,仍安装/更新慢/占用存储多 |
ART | Hybrid: Interpreter + JIT + AOT(Optimizing) | Android 7.x | 兼顾性能和用户体验 |
ART | Hybrid: Interpreter + JIT + AOT(Optimizing) | Android 8.x | 兼顾性能和用户体验 |
从中可看到:
- Android 5.0开始,ART正式取代Dalvik, AOT vs. JIT, 性能提升不少.但Quick compiler本质就是沿用Dalvik中的JIT compiler.
- Android 6.0开始,Optimizing compiler正式启用,同时在Android 7.0后移除Quick.
- Android 7.0开始,引入混合编译,即引入Dalvik中的JIT技术, 在牺牲部分性能条件下改善用户体验,减少内存和存储占用.
- Android 8.0基本是对7.0的强化,如更换新的GC, compiler新的优化等.
ART相关目标文件
子目录 | 目标文件 | 说明 |
---|---|---|
art/dex2oat | dex2oat | 将dex编译为oat文件 |
art/runtime | libart.so | ART运行时 |
art/compiler | libart-compiler.so | ART编译器相关 |
art/patchoat | patchoat | 重定位image文件等 |
art/dalvikvm | dalvikvm | 执行虚拟机程序 |
art/oatdump | oatdump | dump oat文件 |
art/disassembler | libart-disassembler.so | 反汇编oat文件 |
dalvik/dexdump | dexdump | dump dex文件 |
art/dexdump | dexdump2 | dump dex文件 |
art/profman | profman | dump profile文件 |
art/sigchainlib | libsigchain.a, libsigchain.so | 用于runtime的FaultManager |