美文网首页
ART虚拟机与Dalvik虚拟机

ART虚拟机与Dalvik虚拟机

作者: R7_Perfect | 来源:发表于2019-08-01 21:42 被阅读0次

    垃圾回收机制

    首先介绍下dalvik的GC的过程。主要有有四个过程:

    当gc被触发时候,其会去查找所有活动的对象,这个时候整个程序与虚拟机内部的所有线程就会挂起,这样目的是在较少的堆栈里找到所引用的对象;
    注意:这个回收动作和应用程序非并发;

    所有线程就会挂起
    gc对符合条件的对象进行标记;
    gc对标记的对象进行回收;
    恢复所有线程的执行现场继续运行。

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

    后来ART改善了这种GC方式, 主要的改善点在将其非并发过程改成了部分并发,还有就是对内存的重新分配管理。

    当ART GC发生时:

    GC将会锁住Java堆,扫描并进行标记;
    标记完毕释放掉Java堆的锁,并且挂起所有线程;
    GC对标记的对象进行回收;
    恢复所有线程的执行现场继续运行;
    重复2-4直到结束。

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

    提高内存使用,减少碎片化

    Dalvik内存管理特点是:内存碎片化严重,当然这也是Mark and Sweep算法带来的弊端。

    687474703a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f333938353536332d636462613331396461623332643063372e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f737472697025.png

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

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

    相关文章

      网友评论

          本文标题:ART虚拟机与Dalvik虚拟机

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