art dalvik gc对比

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值