面试:Art虚拟机和Davlik虚拟机简要对比
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虚拟机简要对比相关推荐
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机
从Android5.0开始废弃了Dalvik,全面推行ART. Dalvik与ART的区别 (1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行 ...
- Android面试收集录13 Android虚拟机及编译过程
一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...
- 如何在面试时搞定 Java 虚拟机?
作者 | 倪升武 责编 | 胡巍巍 笔者最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题, ...
- java说影_面试被问到Java虚拟机,用这篇文章怼过去
Jvm内存结构 Jvm内存结构,一般是面试官对Java虚拟机这块考察的第一问.讲真,还没背会,自己罚自己面壁思过. Java虚拟机的内存结构一般可以从线程共有和线程私有两部分起头作答,然后再详细说明各 ...
- 【VMware虚拟机】VMware虚拟机中网络连接类型对比【转载】
VMWare虚拟机中网络连接类型对比 1.NAT NAT:Network Address Translation,网络地址转换:虚拟机的网卡连接到宿主的 VMnet8 上 虚拟机与主机的关系:只能单向 ...
- (一)JVM成神路之初识虚拟机 - 探寻Java虚拟机的前世今生之秘
引言 JVM(Java Virtual Machine)Java虚拟机的概念大家都不陌生,Java之所以可以做到"一次编译,到处运行"的跨平台性,其根本原因就在于JVM.JVM是建 ...
- 【Azure】微软 Azure 基础解析(六)计算服务中的虚拟机 VM、虚拟机规模集、Azure Functions 与 Azure 容器(ACI)
本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中. 本系列文章列表如下: [Azure]微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区 ...
- JVM Hotspot 虚拟机与 DalvikART 虚拟机堆栈的区别
文章目录 Hotspot 虚拟机与 Dalvik 虚拟机的区别 Android 内存管理模型 JVM 与 Dalvik 虚拟机在栈的区别 AOT(Ahead Of Time)预先编译机制 JVM 与 ...
- ART与Dalvik哪个好用 ART模式和Dalvik模式区别对比分析
最新的安卓4.4系统中引入了全新的ART模式吗,相比之前流行已久的Dalvik模式有了很大的改变.最近看到不少安卓手机朋友在问ART与Dalvik哪个好这样的问题,因此笔者今天为大家制作了以下这张AR ...
最新文章
- 程序员该如何抉择公司?
- C#分隔字符串时遭遇空值
- ListView setOnItemClickListener无效原因分析
- mysql 已存在数据_MySQL跳过已存在的数据
- Android开发中Edittext设置密码显示隐藏的多种方法
- Sparklens:Spark应用程序优化工具
- 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用
- jquerymobile 基础教程
- “一学就会”微服务的架构模式
- FluentValidation
- fiddler重定向
- JAVA线程池 之 Executors (一) 简介
- Rstudio 1.2 新功能介绍
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- C++笔记----运算符重载
- 使用Natapp本地调试微信公众号H5
- plc里的二进制 用计算机,PLC中常用数制及如何转换
- 山东理工大学pta答案 C语言,山东理工大学高分子化学题库附答案.docx
- c语言食堂菜谱管理系统,基于C语言的食堂菜谱管理系统
- 小编带你简单了解一下加密技术原理:AES加密标准
热门文章
- 转.CNNIC,我不信任你! ——从“受信任的根证书”里赶走CNNIC
- node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法
- Snaker技术文档整理
- 华三防火墙L2TP基础配置
- 一幅图解释区块链结构
- VR虚拟现实大屏展示如何通过H265播放器EasyPlayerPro实现8K视频流播放?
- dllimport和dllexport作用与区别
- msysgit使用说明
- 如何改变胆小怕事的性格?
- 鱼c论坛 python课后题_python课后习题