本文主要是介绍ART和DVM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
##### 1、简介
- Dalvik(DVM)是一个基于JIT(Just in time)编译的引擎。使用DVM存在一些缺点,所以从Android 4.4(Kitkat)开始引入了ART作为运行时,从Android 5.0(Lollipop)开始ART就全面取代了DVM。Android 7.0 向ART中添加了一个just-in-time(JIT)编译器,这样就可以在应用运行时持续的提高其性能。
- 注意:Dalvik(DVM)使用JIT(Just in time)编译,而ART使用AOT(Ahead of time)编译。
##### (1)Just In Time (JIT)
- 使用DVM JIT编译器,每次应用在运行时,它实时的将一部分DVM字节码翻译成机器码。在程序的执行过程中,更多的代码被被编译并缓存。由于JIT只翻译一部分代码,它消耗的更少的内存,占用的更少的物理存储空间。
##### (2)Ahead Of Time(AOT)
- ART内置了一个Ahead-of-Time编译器。在应用的安装期间,他就将DEX字节码翻译成机器码并存储在设备的存储器上。这个过程只在将应用安装到设备上时发生。由于不再需要JIT编译,代码的执行速度要快得多。
#### 2、Java代码如何执行
- 为了使代码和平台无关,JAVA开发了JVM,即Java虚拟机。它为每一个平台开发一个JVM,也就意味着JVM是和平台相关的。Java编译器将.java文件转换成.class文件,也就是字节码。最终将字节码提供给JVM,由JVM将它转换成机器码。
#### 3、Android代码如何执行
- 在Android中,Java类被转换成DEX字节码。DEX字节码通过ART或者DVM转换成机器码。这里DEX字节码和设备架构无关。
- DVM是一个基于JIT(Just in time)编译的引擎。使用DVM存在一些缺点,所以从Android 4.4(Kitkat)开始引入了ART作为运行时,从Android 5.0(Lollipop)DVM。Android 7.0 向ART 中添加了一个 just-in-time(JIT)编译器,这样就可以在应用运行时持续的提高其性能。
#### 4、ART的优点和缺点
##### (1)优点
- 应用运行更快,因为DEX字节码的翻译在应用安装是就已经完成。
- 减少应用的启动时间,因为直接执行的是native代码。
- 提高设备的续航能力,因为节约了用于一行一行解释字节码所需要的电池。
- 改善的垃圾回收器
- 改善的开发者工具
##### (2)缺点
- 应用安装需要更长的时间,因为DEX字节码需要在安装时就翻译成机器码。
- 由于在安装时时生成的native机器码是存储在内部存储器上,所以需要更多的内部存储空间。
这篇关于ART和DVM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!