美文网首页
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 区别

    介绍 Android程序是使用Java语言开发,当然,现在也可以使用kotlin[https://so.csdn....

  • android mvvm思想

    mvvm和MVP比较大的区别是:vm和v是单向引用, 只有activity持有vm引用,vm是不持有view的引用...

  • 虚拟机

    java运行环境为jvm,安卓运行环境为dvm(Dalvik VM)或avm(Art VM) jvm基于栈(内存)...

  • Docker使用学习

    轻部署,省成本,易迁移 docker和虚拟机VM的区别 一、本质上的区别: VM(VMware)在宿主机器、宿主机...

  • VM、Dalvik、ART 介绍

    该篇文章主要分享记录一下自己对 Java 虚拟机这个概念以及 Dalvik 虚拟机的理解,同时也会对他们做一个简单...

  • Vue - 多个Vue实例

    eg: 我们初始化了两个Vue实例,vm和vm2,那么我们就可以在vm2中改变vm,或者vm中去改变vm2。

  • Vue基础(四)--Vue实例的属性和方法

    Vue实例的属性和方法 1.属性 vm.$el vm.$data vm.$options vm.$refs... ...

  • 实例属性

    实例属性 vm.$data vm.$props vm.$el vm.$options vm.$parent vm....

  • 借助overlay网络实现服务器对外通信

    场景: 两台不同网段的虚机:VM1,VM2,需要VM1需要借助VM2的IP出外网访问 方案:由于VM1和VM2不在...

  • 理解Dalvik和ART、JVM虚拟机

    理解基本的Dalvik和ART、JVM虚拟机 一、Dalvik介绍 Dalvik VM是Android平台的核心组...

网友评论

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

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