美文网首页
Dalvik,ART 虚拟机加载APK时的区别

Dalvik,ART 虚拟机加载APK时的区别

作者: 曾经灬 | 来源:发表于2019-06-17 13:10 被阅读0次

    参考: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文件中。

    注意,无论是对dex字节码进行优化,还是将dex字节码翻译成本地机器码,最终得到的结果都是保存在相同名称的一个odex文件里面的,但是前者对应的是一个dey文件(表示这是一个优化过的dex),后者对应的是一个oat文件(实际上是一个自定义的elf文件,里面包含的都是本地机器指令)。

    相关文章

      网友评论

          本文标题:Dalvik,ART 虚拟机加载APK时的区别

          本文链接:https://www.haomeiwen.com/subject/dshafctx.html