ART和Dalvik之间究竟有何区别?

作者: Android架构 | 来源:发表于2019-05-27 17:04 被阅读17次

两者都是基于java的喽?那么art相比dalvik有什么优势?有什么劣势?为什么art会替代dalvik?

主要如下:
1、Ahead-of-time (AOT) compilation instead of Just-in-time (JIT)
2、Improved garbage collection
3、Improved memory usage and reduce fragmentation

Ahead-of-time (AOT) compilation instead of Just-in-time (JIT)

在dalvik中(实际为android2.2以上引入的技术),如同其他大多数jvm一样,都采用的是jit来做及时翻译(动态翻译),将dex或odex中并排的dalvik code(或者叫smali指令集)运行态翻译成native code去执行.jit的引入使得dalvik提升了3~6倍的性能

而在art中,完全抛弃了dalvik的jit,使用了aot直接在安装时用dex2oat将其完全翻译成native code.这一技术的引入,使得虚拟机执行指令的速度又一重大提升

Improved garbage collection

首先介绍下dalvik的gc的过程.主要有有四个过程:
1、当gc被触发时候,其会去查找所有活动的对象,这个时候整个程序与虚拟机内部的所有线程就会挂起,这样目的是在较少的堆栈里找到所引用的对象.需要注意的是这个回收动作是和应用程序同时执行(非并发).
2、gc对符合条件的对象进行标记
3、gc对标记的对象进行回收
4、恢复所有线程的执行现场继续运行

dalvik这么做的好处是,当pause了之后,gc势必是相当快速的.但是如果出现gc频繁并且内存吃紧势必会导致ui卡顿,掉帧.操作不流畅等.

后来art改善了这种gc方式(也是想对ui流畅度做贡献,当然关于ui流畅,5.0以上了新的并行ui线程),主要的改善点在将其非并发过程改变成了部分并发.还有就是对内存的重新分配管理
当art gc发生时:
1、gc将会锁住java堆,扫描并进行标记
2、标记完毕释放掉java堆的锁,并且挂起所有线程
3、gc对标记的对象进行回收
4、恢复所有线程的执行现场继续运行
5、重复2-4直到结束

可以看出整个过程做到了部分并发使得时间缩短.据官方测试数据说gc效率提高2倍

Improved memory usage and reduce fragmentation

官方把这一点合并到了Improved garbage collection这个主题中讲,原因也是和gc有很大关系
可以对比一下两个虚拟机的内存分配的规则,首先是dalvik.他的内存管理特点是:内存碎片化严重,当然这也是Mark and Sweep算法带来的弊端

该算法如图(图片来自《深入理解jvm》):

可以看出每次gc后内存千疮百孔,本来连续分配的内存块变得碎片化严重,之后再分配进入的对象再进行内存寻址变得困难

art的解决:在art中,它将java分了一块空间命名为Large-Object-Space,这块内存空间的引入用来专门存放large object.同时art又引入了moving collector的技术,即将不连续的物理内存块进行对齐.对齐了后内存碎片化就得到了很好的解决.Large-Object-Space的引入一是因为moving collector对大块内存的位移时间成本太高,而且提高内存的利用率

根官方统计,art的内存利用率提高10倍了左右。

自己是从事了七年开发的Android工程师,不少人私下问我,2019年Android进阶该怎么学,方法有没有?

没错,年初我花了一个多月的时间整理出来的学习资料,希望能帮助那些想进阶提升Android开发,却又不知道怎么进阶学习的朋友。【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

点击链接加入群聊【Android移动架构总群】:加入群聊

资料大全

相关文章

  • ART和Dalvik之间究竟有何区别?

    两者都是基于java的喽?那么art相比dalvik有什么优势?有什么劣势?为什么art会替代dalvik? 主要...

  • Android运行时的几个概念解释

    ART、JIT、AOT、Dalvik之间有什么关系? Dalvik与ART的区别 什么是Dalvik? Dalvi...

  • Dalvik,ART与ODEX相爱相生

    如果你有这样的问题:1.Dalvik和ART的区别2.DEX在Dalvik转化为ODEX和ART中转化为ODEX的...

  • ART和Dalvik区别

    Art上应用启动快,运行快,但是耗费更多存储空间,安装时间长,总的来说ART的功效就是"空间换时间"。 ART: ...

  • Dalvik和ART区别

    要搞清楚区别,首先来认识下这2者分别是撒 什么是Dalvik? Dalvik是用于Android平台的Java虚拟...

  • 热修复原理学习-tinker,qzone

    1.1 Dalvik与ART的区别Dalvik:在Android5.0之前默认使用的是Dalvik。Dalvik是...

  • Android面试 虚拟机相关

    面试问题 Jvm,Dalvik与Art三者之间的区别 那dex和class到底在结构上有什么区别呢 Android...

  • Dalvik、ART与JVM之间区别

    Dalvik简介 1、Google自己设计的用于Android平台的虚拟机; 2、支持已转化为dex格式的java...

  • Android虚拟机

    [Android开发JVM、Dalvik以及ART的区别] 前言 Dalvik是Google公司自己设计用于And...

  • [转]ART和Dalvik区别

    什么是Dalvik Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟...

网友评论

    本文标题:ART和Dalvik之间究竟有何区别?

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