art虚拟机原理
art虚拟机的背景与设计目标
Android运行时(Android Runtime,简称ART)是Android操作系统的核心组件之一,负责执行应用程序的字节码,在Android 5.0(Lollipop)版本之前,Dalvik虚拟机是Android的主要运行时环境,Dalvik虚拟机采用即时编译(JIT)技术,在应用运行时动态编译字节码,导致启动速度较慢、运行效率不高,为了提升系统性能和用户体验,Google在Android 5.0中引入了ART虚拟机,并逐渐成为Android系统的默认运行时。

ART的设计目标主要包括:
- 提升应用性能:通过预编译(AOT)和混合编译(Ahead-of-Time Compilation with Just-in-Time Optimization)技术,减少运行时编译开销,提高执行效率。
- 降低内存占用:优化内存管理机制,减少垃圾回收(GC)频率和停顿时间,提升系统流畅度。
- 改善电池续航:减少CPU和内存的冗余计算,降低功耗。
- 支持跨平台兼容性:继续兼容Dalvik的字节码格式,确保现有应用无需修改即可运行。
art虚拟机的核心架构
ART虚拟机的架构分为多个层次,各层协同工作以实现高效的应用执行,其核心组件包括:
类加载与验证
ART在应用安装时完成类的加载和验证过程,与Dalvik不同,ART在安装阶段会将Dex(Dalvik Executable)文件转换为机器码,并生成可执行文件(如OAT文件),这一过程包括:
- Dex文件解析:读取Dex文件中的类、方法、字段等信息,构建内存中的数据结构。
- 字节码验证:检查字节码的合法性,确保不会违反Java语言规范或虚拟机安全约束。
- 类链接:将符号引用转换为直接引用,为后续执行做准备。
编译优化技术
ART采用多种编译技术优化代码执行效率:
- 预编译(AOT):在应用安装时,将Dex字节码编译为本地机器码,生成OAT文件(包含ELF格式的机器码和Dex数据),运行时直接加载机器码,避免动态编译开销。
- 混合编译:结合AOT和JIT的优势,对频繁执行的代码进行热点检测(Profiling),并在运行时进一步优化。
- 编译器优化:使用LLVM编译器前端进行优化,如方法内联、死代码消除、循环优化等,提升机器码执行效率。
内存管理与垃圾回收
ART的垃圾回收机制相比Dalvik有了显著改进:

- 并发标记清除(Concurrent Mark-Sweep, CMS):在垃圾回收过程中,大部分工作与主线程并发执行,减少应用停顿时间。
- 分代回收:将堆内存分为新生代(Young Generation)和老年代(Old Generation),对不同生命周期的对象采用不同的回收策略,提高回收效率。
- 内存压缩:在垃圾回收后对内存进行整理,减少内存碎片,提升内存利用率。
原生代码支持
ART通过Java本地接口(JNI)和Android调用接口(Android Interface Definition Language, AIDL)支持原生代码(C/C++)的执行,ART负责管理原生代码的生命周期,并提供高效的内存访问机制,确保Java与原生代码之间的交互无缝衔接。
art虚拟机的执行流程
ART虚拟机的执行流程可以分为以下几个阶段:
应用安装与预编译
当用户安装APK文件时,Android系统会调用ART的编译器(如dex2oat)将Dex文件转换为OAT文件,这一过程可能需要较长时间,但显著提升了应用后续的启动速度和运行效率。
应用启动与类加载
当用户启动应用时,ART加载OAT文件中的机器码和Dex数据,并根据需要动态加载类,类加载过程采用惰性加载策略,仅在首次使用时加载,减少内存占用。
代码执行与优化
在应用运行过程中,ART通过混合编译技术对热点代码进行进一步优化,通过方法调用计数器识别频繁执行的方法,并触发JIT编译生成更高效的机器码。

垃圾回收与内存管理
ART在运行时持续监控对象的生命周期,并在内存不足时触发垃圾回收,通过并发和分代回收机制,尽量减少对应用性能的影响。
art虚拟机的优势与挑战
优势
- 性能提升:AOT编译显著减少了运行时编译开销,应用启动速度和执行效率大幅提升。
- 内存优化:高效的垃圾回收机制和内存压缩技术,降低了内存占用和碎片化问题。
- 电池续航:减少CPU和内存的冗余计算,延长设备电池使用时间。
挑战
- 安装时间增长:预编译过程增加了应用安装时间,尤其对于大型应用可能影响用户体验。
- 存储空间占用:OAT文件和编译缓存增加了存储空间需求,对低存储设备造成压力。
- 兼容性问题:虽然ART兼容Dex字节码,但部分依赖Dalvik特性的应用可能需要适配。
ART虚拟机通过预编译、混合编译、并发垃圾回收等技术,显著提升了Android应用的性能和运行效率,尽管存在安装时间和存储空间占用等挑战,但其优化效果和用户体验的提升使其成为Android系统的核心运行时环境,随着Android版本的不断迭代,ART虚拟机也在持续进化,为用户提供更流畅、高效的移动计算体验。

















