文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android虚拟机Dalvik和ART科普

2023-01-18 12:02

关注

前言

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

Dalvik 虚拟机

Dalvik虚拟机是Google自己设计的用于Android平台的虚拟机,它曾经是Android平台的核心组成部分之一。它负责加载dex/odex文件并解析成机器码然后执行。Dalvik虚拟机并没有遵循《Java虚拟机规范》,因此不能算是Java虚拟机。但是它与Java却又有联系,它执行的DEX文件是通过Class文件转化而来。我们也可以认为它是为了能在安卓设备运行而对JVM进行优化的产物

Dalvik诞生消亡史

Dalvik 特点 (与JVM的区别)

什么是JIT(Just-In-Time Compiler)

早期没有JIT的时候,虚拟机运行时,会通过解释器来解释字节码并将其翻译为机器码,逐条读入,逐条翻译,最后再执行,这样就比较慢,效率不高。针对上面这个问题,引进了JIT(即时编译器)技术。它是一种优化手段

JIT技术简单来说就是将解释过的机器码缓存起来,下次再执行时到这个方法的时候,则直接从缓存里面取出机器码来执行。减少了读取字节码和翻译字节码的操作。以此来提高效率。JIT技术的引入使得Dalvik的性能提升了3~6倍

不过要注意的是并不是所有执行过的代码对应的机器码都会被缓存起来。而是只有被认定为热点代码(Hot Spot Code) 的代码才会。这里所指的热点代码主要有两类,包括:

JIT技术虽好,但是也是有缺点的:

什么是dex

dex是二进制文件,用于在Android虚拟机上执行。是通过把所有的class文件进行合并优化得到的。dex文件去除了class文件中的冗余信息(比如重复字符串),并且结构更加紧凑,因此在dex解析阶段可以减少I/O操作,提高类查找速度。

它与.jar文件不同,.jar文件像是一个文件夹,里面的.class是单独的文件,各个class信息里面会出现重复的信息。而dex文件,则将所有的.class里面的信息整合在一起,去除掉里面的重复数据。

什么是odex

odex是从apk提取出dex文件并通过优化后得到的产物,它被保存到data/dalvik-cache目录下。原apk文件中的classes.dex可以保留也可以删除,甚至有时候会留下残缺的dex文件。

系统在首次启动时,需要对预置的apk进行安装,此时需要将dex从apk文件中解压出来放到data/app文件夹中。

一般情况下,在Android系统进行编译的时候,预处理提取Odex文件的话,将会大大优化系统首次启动时间。

ART 虚拟机

ART虚拟机在Android 5.0开始替换Dalvik虚拟机。其处理应用程序执行的方式不同于Dalvik虚拟机,它不使用JIT而是使用了AOT(Ahead-Of-Time),也就是提前编译技术。并且对垃圾收集器也进行了改进和优化,当然也还包括了其他的优化。

什么是AOT(Ahead-Of-Time

AOT也就是提前编译技术。简单来说就是提前将字节码转换成本地机器码,然后存储在本地磁盘上,运行时可以直接执行,避免了Dalvik时期的应用运行时再来解释字节码。运行时效率大大提高。

在Android 7.0 之前,Android系统安装应用的时候,会进行一次预编译,将字节码预先编译成本地机器码,生成.oat文件,并存储在本地磁盘上,也就是AOT技术。这样在应用每次运行时就不需要重新编译,可以直接使用编译好本地机器码,运行效率大大提升。但是这也使得安装应用的时间大大增加,

于是在Android7.0,又重新引进了JIT技术,形成JIT/AOT混合编译模式,这种混合编译的特点是:

使用了JIT来对AOT进行补充,可以提升运行时性能,节省存储空间,加快应用运行速度。 具体可以查看google官方文档:实现 ART 即时 (JIT) 编译器

ART垃圾收集器优化

ART时间线

Dalvik VM 和 ART VM 有什么区别

以上就是Android虚拟机Dalvik和ART科普及使用的详细内容,更多关于Android虚拟机Dalvik ART的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯