复制算法

# 对象信息

对象信息分为对象头和域两部分,对象头持有对象的一些描述信息,比如tag标记(用于标识对象是否已经被复制),forwording(记录复制后的对象位置,因为复制过程是图的遍历过程,被复制对象可能再次被访问到)等;而域则是保存有对象的属性信息;

# 复制算法

将对空间划分为From和To两块等大区域,GC时将From区域存活对象移动到To区域。在执行GC操作时,遍历GC Root,以深度遍历方式(中序遍历)查到并移动存活对象。对于具体的每一个存活对象,首先判断tag标记是否已经被设置为copied值,如果是,则至二级返回forwarding值;反之,首先将tag标记设置为copied值,然后将对象拷贝至To区域(此时拷贝至To区域的对象中的属性还指向From区域对象)和设置forwarding值,之后以此拷贝对象属性(子对象)并更新对应属性指向(此时对象属性指向To区域中对象),最后返回fowading值。


# 优缺点

优点(与标记-清除算法比较):吞吐量高(无清除阶段),可高速分配(不用遍历空闲链表),无碎片化,与缓存兼容(gc后父子对象更靠近,便于缓存);

缺点:对利用率低(浪费了to空间),不兼容保守式GC(会移动对象位置),递归调用(栈溢出风险,递归速度低于迭代);

# 改进措施

1 cheney式复制算法:将递归复制(深度遍历)改为迭代复制(广度遍历,引入队列),提高遍历速度,失去缓存兼容;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值