GC_4_GC复制算法


GC复制算法


4 GC复制算法

  Copying GC是Marvin L.Minsky在1963年研究出来的算法。就是指把某个空间里的活动对象复制到其它空间,把原空间里的所有对象都回收掉。在此,将复制活动对象的原空间称为From空间,将粘贴活动对象的新空间称为To空间。

4.1 什么是GC复制算法

  GC复制算法是利用From空间进行分配的。当From空间被完全占满时,GC会将活动对象全部复制到To空间。当复制完成后,该算法会把From空间和To空间互换,GC也就结束了。From空间和To空间大小必须一致。这是为了保证能把From空间中的所有活动对象都收纳到To空间里。
  GC复制算法

4.1.1 执行过程

  假设目前堆里的配置如下。
  初始状态
  执行GC。首先是从根直接引用的对象B和G,B先被复制到了To空间。
B被复制之后
  将B被复制后生成的对象称为B’。在From空间中B已经被打上了复制完成标签。但是,这里只把B’复制了过来,它的子对象A还在From空间里,下面把A复制到To空间里。
  A被复制之后

  这次才是真正意义上复制了B。因为A没有子对象,所以对A的复制就完成了。
  接下来,要和复制B一样从根引用复制G,以及其子对象E。虽然B也是G的子对象,不过因为已经复制完B了,所以只要把从G执行B的指针转换到B’上。
  最后,只要把From空间和To空间互换,GC就结束了。
GC结束后
  对象C、D、F因为没法从根查找,所以会被回收。这里程序是以B、A、G、E的顺序搜索对象的,使用的是深度优先搜索。

4.2 优点

4.2.1 优秀的吞吐量

  GC标记-清除算法消耗的吞吐量是搜索活动对象(标记阶段)所花费的时间和搜索整体堆(清除阶段)所花费的时间之和。
  另一方面,因为GC复制算法只搜索并复制活动对象,所以跟一般的GC标记-清除算法相比,它能在短时间内完成GC,也就是说其吞吐量优秀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值