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

直接上图:

Art与Davlik加载过程.png

Java虚拟机

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

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

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

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虚拟机相比。

ART虚拟机

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

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

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

优缺点

优点

  • Davlik虚拟机apk包占用内存小;
  • Art虚拟机启动速度快;

缺点

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

总结:

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

面试:Art虚拟机和Davlik虚拟机简要对比相关推荐

  1. JAVA虚拟机、Dalvik虚拟机和ART虚拟机

    从Android5.0开始废弃了Dalvik,全面推行ART. Dalvik与ART的区别 (1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行 ...

  2. Android面试收集录13 Android虚拟机及编译过程

    一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  3. 如何在面试时搞定 Java 虚拟机?

    作者 | 倪升武 责编 | 胡巍巍 笔者最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题, ...

  4. java说影_面试被问到Java虚拟机,用这篇文章怼过去

    Jvm内存结构 Jvm内存结构,一般是面试官对Java虚拟机这块考察的第一问.讲真,还没背会,自己罚自己面壁思过. Java虚拟机的内存结构一般可以从线程共有和线程私有两部分起头作答,然后再详细说明各 ...

  5. 【VMware虚拟机】VMware虚拟机中网络连接类型对比【转载】

    VMWare虚拟机中网络连接类型对比 1.NAT NAT:Network Address Translation,网络地址转换:虚拟机的网卡连接到宿主的 VMnet8 上 虚拟机与主机的关系:只能单向 ...

  6. (一)JVM成神路之初识虚拟机 - 探寻Java虚拟机的前世今生之秘

    引言 JVM(Java Virtual Machine)Java虚拟机的概念大家都不陌生,Java之所以可以做到"一次编译,到处运行"的跨平台性,其根本原因就在于JVM.JVM是建 ...

  7. 【Azure】微软 Azure 基础解析(六)计算服务中的虚拟机 VM、虚拟机规模集、Azure Functions 与 Azure 容器(ACI)

    本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中. 本系列文章列表如下: [Azure]微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区 ...

  8. JVM Hotspot 虚拟机与 DalvikART 虚拟机堆栈的区别

    文章目录 Hotspot 虚拟机与 Dalvik 虚拟机的区别 Android 内存管理模型 JVM 与 Dalvik 虚拟机在栈的区别 AOT(Ahead Of Time)预先编译机制 JVM 与 ...

  9. ART与Dalvik哪个好用 ART模式和Dalvik模式区别对比分析

    最新的安卓4.4系统中引入了全新的ART模式吗,相比之前流行已久的Dalvik模式有了很大的改变.最近看到不少安卓手机朋友在问ART与Dalvik哪个好这样的问题,因此笔者今天为大家制作了以下这张AR ...

最新文章

  1. 程序员该如何抉择公司?
  2. C#分隔字符串时遭遇空值
  3. ListView setOnItemClickListener无效原因分析
  4. mysql 已存在数据_MySQL跳过已存在的数据
  5. Android开发中Edittext设置密码显示隐藏的多种方法
  6. Sparklens:Spark应用程序优化工具
  7. 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用
  8. jquerymobile 基础教程
  9. “一学就会”微服务的架构模式
  10. FluentValidation
  11. fiddler重定向
  12. JAVA线程池 之 Executors (一) 简介
  13. Rstudio 1.2 新功能介绍
  14. Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
  15. C++笔记----运算符重载
  16. 使用Natapp本地调试微信公众号H5
  17. plc里的二进制 用计算机,PLC中常用数制及如何转换
  18. 山东理工大学pta答案 C语言,山东理工大学高分子化学题库附答案.docx
  19. c语言食堂菜谱管理系统,基于C语言的食堂菜谱管理系统
  20. 小编带你简单了解一下加密技术原理:AES加密标准

热门文章

  1. 转.CNNIC,我不信任你! ——从“受信任的根证书”里赶走CNNIC
  2. node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法
  3. Snaker技术文档整理
  4. 华三防火墙L2TP基础配置
  5. 一幅图解释区块链结构
  6. VR虚拟现实大屏展示如何通过H265播放器EasyPlayerPro实现8K视频流播放?
  7. dllimport和dllexport作用与区别
  8. msysgit使用说明
  9. 如何改变胆小怕事的性格?
  10. 鱼c论坛 python课后题_python课后习题