美文网首页
Adroid Art vm和Davlik vm 区别

Adroid Art vm和Davlik vm 区别

作者: Luke_单车 | 来源:发表于2022-12-07 10:24 被阅读0次

    介绍 Android程序是使用Java语言开发,当然,现在也可以使用kotlin语言。但是实际上我们开发出来的Android程序并不能运行在JVM上,而是只能运行在一个类似JVM的Android虚拟机上。Android虚拟机有两种,分别是Dalvik虚拟机ART虚拟机

    1. Android 4.4以后推出了ART虚拟机,它与Davlik虚拟机最大的不同在于,系统在安装应用时会对其进行预编译一次,将字节码转换成机器指令,以后每次启动不会重新编译,直接运行本地机器码
      Art 与 Davlik加载过程

    2. Java虚拟机

    首先先来说一下java虚拟机,不管是Art虚拟机还是Davlik虚拟机,首先第一步需要得到.class字节码

    • Java虚拟机加载的是.class字节码,所以需要将.java文件编译成.class文件;

    • 它是基于栈结构的,需要频繁的从栈上读取写入数据,耗费大量CPU,而且含有大量冗余信息,占用内存,显然对于内存要求挺高,并不适合内存容量相对较小的移动设备。

    2. Davlik虚拟机

    在Android4.4以下包括4.4使用的是Davlik虚拟机,所有程序都运行在虚拟机中,每一个应用程序就是Davlik虚拟机中的一个进程。

    • Davlik虚拟机加载的是.dex文件,.dex文件是由.class文件所生成,在SDK中有一个dex工具,专门生成.dex文件

    • 它是基于寄存器的,数据访问是通过寄存器来直接传递的,相对速度较基于栈结构方式要快很多;

    • 生成后的.dex文件有大量的冗余信息,内容过于臃肿,因此需要将其文件进行优化,利用SDK中 .dexopt工具将.dex文件优化后最终得到.odex文件,这一过程发生在编译的时候,最终得到是一个包含.dex的apk文件;

    • Davlik虚拟机特别勤劳,每次应用启动后,通过JIT编译器将.dex翻译成机器指令,这一过程发生在程序运行过程中,并且每次启动运行都会重新翻译一次,在Android2.2时候引入了JIT编译器,它会将频率高的程序翻译归于热方法,然后保存在内存中,下次就不会再重新翻译直接从内存中获取,一定程度上改善了运行慢的问题,但是还是不能与直接运行本地机器指令的ART虚拟机相比。

    3. ART虚拟机

    Android5.0开始,Google将Davlik虚拟机替换为Art虚拟机,大大改善了启动速度。

    • Art虚拟机加载的是.oat文件,即(本地机器指令),当.java文件编译成.dex文件后,利用sdk中dexoat工具将.dex文件生成.oat文件,其实这个就是机器指令,这一过程主要在应用安装的时候转换的,所以在安装应用时会耗费时间,下次启动后直接运行的已经编译好的本地机器码指令,大大提高了启动速度;

    • 应用程序仍然是一个apk文件,只是与Davlik不同的是它在安装的时候已经将字节码翻译成机器指令,并不需要像Davlik一样每次运行程序再翻译,但这样生成的apk大小会比Davlik生成的apk大小大很多

    4. 优缺点

    • 优点
      Davlik虚拟机apk包占用内存小;
      Art虚拟机启动速度快;
    • 缺点
      Davlik虚拟机启动速度慢,每次运行都会重新翻译一次;
      Art虚拟机apk占用内存大;

    Art虚拟机和Davlik虚拟机简要对比和区别

    • ART早期使用AOT技术,后期使用AOT+JIT混合,而Dalvik使用JIT
    • ART支持64位CPU并兼容32位CPU,而Dalvik只支持32位CPU
    • ART对垃圾收集器进行了改进优化,提高了吞吐量。

    在Android使用Davlik虚拟机的时候,移动设备内存小,我们需要对内存格外控制,随着移动设备内存容量的增大,用户开始追求的是流畅度,所以应用占用内存多大相对于app的流畅度来说显得就很小了

    相关文章

      网友评论

          本文标题:Adroid Art vm和Davlik vm 区别

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