参考:Android ART运行时无缝替换Dalvik虚拟机的过程分析
-
Dalvik虚拟机,采用JIT(Just-In-Time),用来在运行时动态地将执行频率很高的dex字节码翻译成本地机器码,然后再执行。dex字节码翻译成本地机器码是发生在应用程序的运行过程中的,并且应用程序每一次重新运行的时候,都要做重做这个翻译工作的。因此,即使用采用了JIT,Dalvik虚拟机的总体性能还是不能与直接执行本地机器码的ART虚拟机相比。
-
ART虚拟机,直接运行本地机器码,采用AOT(Ahead-Of-Time)模式,在应用安装时,将dex字节码翻译成本地字节码odex(elf文件)。
-
Dalvik虚拟机安装时优化,libdvm.so通过dexopt函数,在/data/dalvik-cache目录中创建一个odex(有时候还是.dex文件,但是打开查看会是odex(dey36)文件)文件。这个odex文件就是作为dex文件优化后的输出文件。
-
ART虚拟机,libart.so通过run_dex2oat函数,将dex文件翻译成oat文件,实际上就是将dex字节码翻译成本地机器码,并且保存在一个oat文件中。
网友评论