art dalvik gc对比

来源:互联网 发布:信息清理软件 编辑:程序博客网 时间:2024/05/29 00:34

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

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

art的gc的过程:
1、gc将会锁住java堆,扫描并进行标记
2、标记完毕释放掉java堆的锁,并且挂起所有线程
3、gc对标记的对象进行回收
4、恢复所有线程的执行现场继续运行
5、重复2-4直到结束

:主要的改善点在将其非并发过程改变成了部分并发.还有就是对内存的重新分配管理

二者比较:gc被触发时,dalvik在查找无用对象时挂起所有线程,art则是在查找无用对象时并发执行,回收对象才挂起所有线程。art gc省时在查找无用对象的上面。

dalvik内存管理特点:内存碎片化严重,当然这也是Mark and Sweep算法带来的弊端。
这里写图片描述
每次gc后内存千疮百孔,本来连续分配的内存块变得碎片化严重,之后再分配进入的对象再进行内存寻址变得困难

art内存管理特点:
1、它将java分了一块空间命名为Large-Object-Space,专门存放large object。
2、同时art又引入了moving collector的技术(即将不连续的物理内存块进行对齐,对齐了后内存碎片化就得到了很好的解决)。

:Large-Object-Space的引入是因为:moving collector对大块内存的位移时间成本太高。

0 0