什么是Dalvik
Dalvik是适用于Android平台的java虚拟机,支持.dex格式的java应用程序运行。
什么是ART
Android Runtime,Android4.4提供的一种与Dalvik完全不同的运行时环境,在5.0以及以上的版本默认是ART环境。在应用安装的时候,预编译字节码到机器码,这种机制叫做AOT(Ahead Of Time),应用安装会变慢,但是运行效率会更高。
ART可以兼容Dalvik虚拟机。.dex文件经过AOT编译之后,产生的文件是.aot文件,ART如果在运行时加载.dex文件,走的流程跟Dalvik一样的流程,如果是热点代码也会通过JIT编译成机器码。
dexopt和dex2oat
dexopt对dex进行验证和优化成odx(Optimized dex)文件
dex2oat在安装的时候,将dex文件执行dexopt优化之后,在将odex执行AOP编译成AOT可执行的文件(机器码)。
Dalvik和ART的区别
- Dalvik在运行时,需要解释执行,常用的热点代码会通过JIT(Just In Time),将字节码编译成机械码。而ART环境是在应用安装的时候,字节码预编译成机器码,运行时更高效
注意:为啥在应用安装的时候,才预编译成机器码,而不是在apk编译的时候呢?
主要的原因是安卓不同的CPU架构,比如arm64-v8a,armeabi-v7a,编译成机器码之后不能跨平台。
- ART占用的空间比Dalvik占用空间大,因为是预编译成机器码,空间换时间
- 预编译减少程序反复编译,减少CPU的使用,降低电量的消耗。