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之间究竟有何区别?

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