Android虚拟机Dalvik和ART详解

2023-09-23 11:31:56 来源: 简易百科 阅读量:13555   

App安装时不编译代码只校验合法性,运行时通过解释器执行,将运行频繁的代码进行编译放到内存缓存并且记录在本地配置文件,后台线程编译配置文件记录的方法存放到.odex文件,再次运行App时优先读.odex文件中编译后的代码,然后重复这个过程。

Android应用用JAVA/Kotlin编写,Android虚拟机并不使用JVM字节码,而是将Class文件通过DX编译器编译程dex文件,然后由虚拟机执行;

底层眼里无论是java还是kolin,最终都是机器码运行;

不废话,开始介绍

一、Dalvik简单介绍1、Dalvik虚拟机介绍

Dalvik是google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且 每一个Dalvik 应用作为一个独立的linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

2、Dalvik诞生消亡史

  • Android 1.0,使用Dalvik作为Android虚拟机运行环境。
  • Android 2.2,Google在Andriod虚拟机中加入了JIT编译器。
  • Android 4.4,Google带来了全新的虚拟机运行环境ART,此时ART和Dalvik是共存的,用户可以在两者之间进行选择。
  • Android 5.0,ART全面取代了Dalvik成为了Android虚拟机运行环境,至此Dalvik退出历史舞台。
3、Dalvik 特点
  • Dalvik虚拟机运行的是Dalvik字节码,Dalvik字节码由Java字节码转换而来,并被打包到一个dex文件中。而JVM运行的是class文件或jar文件;
  • 加载速度快,dex相比于Jar文件会把所有包含的信息整合在一起,减少了冗余信息。这样就减少I/O操作,提高类的查找速度。
  • Dalvik虚拟机是基于寄存器,而JVM是基于栈(操作数栈)。虽然基于寄存器执行效率好,但是可移植性差,难跨平台。
  • Dalvik虚拟机允许在有限的内存中同时运行多个进程,每一个应用都运行在一个Dalvik虚拟机实例中,拥有独立的进程空间。
  • Dalvik虚拟机有共享机制,不同应用之间在运行时可以共享相同的类,拥有更高的效率。
二、ART虚拟机1、ART概念介绍
  • ART虚拟机在Android 5.0开始替换Dalvik虚拟机。其处理应用程序执行的方式不同于Dalvik虚拟机,它不使用JIT而是使用了AOT(Ahead-Of-Time),也就是提前编译技术。并且对垃圾收集器也进行了改进和优化。
  • ART虚拟机由Android4.4被引入成为可选项,在Android5.0之后替换掉了Dalvik,并且在Android7.0和8.0分别进行了一系列改动。
2、基本概念和名词
  • .dex文件:App所有java源代码编译后生成众多class文件,由DX/D8,编译为一个/多个(multiDex)dex文件,由Android虚拟机编译执行。
  • .odex文件:dex文件经过验证和优化后的产物,art下的odex文件包含经过AOT编译后的代码以及dex的完整内容,但Android8.0之后odex中的dex内容移动到了.vdex文件。
  • .art文件:art下根据配置文件生成odex文件时同时生成.art文件,主要是为了提升运行时加载odex中热点代码的速度,包含了类信息和odex中热点方法的索引,运行App时会首先根据这个文件来加载odex中已经编译过的代码。
  • 解释器(Interpreter):用于程序运行时对代码进行逐行解释,翻译成对应平台的机器码执行。
  • JIT编译(Just In Time):由于解释器方式运行太慢引入,对于频繁运行的热点代码(判定标准一般是在某个时间段内执行次数达到某个阈值)进行实时编译(在ART下以方法为粒度)执行,并且缓存JIT编译后的代码在内存中用于下次执行。由于以方法为粒度(ArtMethod)进行编译,JIT编较于解释器可以生成效率更高的代码,运行更快。
  • AOT编译(Ahead-Of-Time):应用安装时全量编译所有代码为本地机器码,运行时直接执行机器码。
3、ART 如何运作

(1)4.4~7.0

最开始ART只采用AOT编译,在App安装时就编译所有代码存储在本地,打开App直接运行,这样做的优点是应用运行速度变快,缺点也很明显,App安装时间明显变长,而且占用存储空间较大

7.0

Android N之后对于ART进行改动,重新引入了JIT编译,结合使用AOT/JIT混合编译,主要机制如下:

  • 安装时不进行任何编译,前几次运行仅通过解释器解释运行,同时对热点代码进行JIT编译,并将这些代码的相关信息记录在一个配置文件里
  • 设备处于空闲和充电状态时,编译守护进程读取配置文件对热点代码进行AOT编译并写入到app对应的odex文件中
  • 再次启动应用后优先使用AOT编译过的代码,否则使用解释器+JIT编译,重复这个过程
  • 对于一些庞大的APP,比如某宝,有些功能可能你一辈子都不会用到,根据上述策略这部分代码就不会被编译保存,从而减少了存储空间的占用。另外,在系统升级时也避免了全量编译所有现存应用造成的时间空间消耗。

8.0

Android 8.0引入了.vdex文件,它里面包含 APK 的未压缩 DEX 代码,以及一些用于加快验证速度的元数据.

4、ART垃圾收集器优化

  • 只有一次GC暂停。
  • 并发复制,可减少后台内存使用和碎片。
  • GC暂停的时间不受堆大小影响。
  • 在清理最近分配的短时对象这种特殊情况中,回收器的总GC时间更短。
  • 优化了垃圾回收的工效,能够更加及时地进行并行垃圾回收,这使得GC_FOR_ALLOC事件在典型用例中极为罕见。
5、ART时间线
  • Android 4.4 ,ART和Dalvik是共存的,用户可以在两者之间进行选择。
  • Android 5.0,正式取代Dalvik虚拟机成为Android虚拟机运行环境,Dalvik退出历史舞台,AOT取代JIT。
  • Android 7.0,JIT回归,采用JIT和AOP混合编译模式。
  • ART持续更新优化
6、Dalvik VM 和 ART VM 有什么区别
  • ART早期使用AOT技术,后期使用AOT+JIT混合,而Dalvik使用JIT。
  • ART支持64位CPU并兼容32位CPU,而Dalvik只支持32位CPU。
  • ART对垃圾收集器进行了改进优化,提高了吞吐量。
总结

核心内容就一句话:App安装时不编译代码只校验合法性,运行时通过解释器执行,将运行频繁的代码进行编译放到内存缓存并且记录在本地配置文件,后台线程编译配置文件记录的方法存放到.odex文件,再次运行App时优先读.odex文件中编译后的代码,然后重复这个过程。

声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。

精选 导读

大摩:苹果产量或超预期增长,预计Q1业绩有“惊喜”

摩根士丹利分析师KatyHuberty指出,苹果本季度iPhone产量可能超预期增长,因为交货周期正在下降到“更正常的水平”。该分析师预计苹...

发布时间: 2021-12-23 17:04
行情   2021-12-23

中金:维持石四药集团跑赢行业评级目标价5.8港元

中金发布研究报告称,维持石四药集团“跑赢行业”评级,保持2021/22年归母净利润预测7.9/11.64亿元不变,目标价5.8港元。报告中称...

发布时间: 2021-12-23 17:03
行情   2021-12-23

实探中装建设元宇宙合作方鸿蒙时代:与华为无关已搬离注册地

12月22日,深交所对中装建设发布关注函,要求说明公司是否存在“楼宇智能大数据信息处理、AI可视化、元宇宙应用、智能建造系统、区块链等技术”...

发布时间: 2021-12-23 17:02
行情   2021-12-23

“疫”线女将:眼里有光心中有爱

“疫”线女将:眼里有光心中有爱题:“疫”线女将:眼里有光心中有爱曾灯光璀璨、游人如织的边陲小城因新冠疫情的再次暴发按下“暂停键”。内蒙古自治...

发布时间: 2021-12-23 16:48
要闻   2021-12-23

联通网络智能运维产品研发招标:华为、中软等11家企业入围

中国联通日前正式公布网络智能运维产品研发招标结果,华为、中软、软通动力、亚信科技等11家企业入围。传统网络故障的被动处理方式,从故障感知到信...

发布时间: 2021-12-23 16:35
酷玩   2021-12-23

热点 推荐

小米12Pro自研智能动态刷新率演示视频公布:支持新技能“滑动变速”,更

今日上午,小米手机官方表示,小米自研智能动态刷新率,是第二代低功耗2K屏幕的创新体验,第一次让小米12Pro拥有了滑动变速的新技能。小米表示...

发布时间: 2021-12-23 16:31
酷玩   2021-12-23

增速惊人!鸿蒙用户量半年突破2.2亿

C114讯12月23日下午消息在今日举办的华为动机旗舰新品发布会上,华为常务董事、消费者BGCEO、智能汽车解决方案BUCEO余承东公布了鸿...

发布时间: 2021-12-23 16:26
酷玩   2021-12-23

用户群聊从线上走到线下他趣成年轻群体社交困境破局者

伴随当下工作和生活节奏越来越紧凑,婚恋、交友等社交需求逐渐成为年轻人的刚性需求。为满足日益提升的社交需求,他趣用户从线上延伸到线下,通过组织...

发布时间: 2021-12-23 14:59
机器人   2021-12-23

京东会展云“云上服贸会”项目入选中国信通院“2021年数字孪生城市典型案

近日,2022中国信通院ICT+深度观察报告会隆重举办,京东会展云技术支持的中国国际服务贸易交易会数字平台项目入选“2021年数字孪生城市典...

发布时间: 2021-12-23 14:56
机器人   2021-12-23

华为Mate9手机推送鸿蒙HarmonyOS2.0.0.140:新增桌面

华为Mate9手机开始推送鸿蒙HarmonyOS2.0.0.140更新。更新包1优化了音量等基础体验,并新增了桌面图标放大功能。更新包2修复...

发布时间: 2021-12-23 14:41
机器人   2021-12-23
bd9