Mark-Sweep算法

一点前言

  • GC的各种算法本质上是由3种基本的算法组合优化来的,即Mark-Sweep标记清除算法、引用计数法和GC复制算法。
  • 今天主要学习下Mark-Sweep标记清除算法。

最基本的Mark-Sweep标记清除算法

  • 标记清除算法由标记阶段和清除阶段组成,标记阶段会将当前仍然活跃的对象的mark字段标记为true(数据结构一般是stack)。清除阶段则是遍历所有的对象列表(数据结构一般为队列,链表等),判断mark为true则将nark置false,mark为false则将该对象加入free链表,用作后续的内存使用。
  • 伪码实现:
mark_sweep(){
    mark_phase()
    sweep_phase()
}
  • 标记阶段
mark_phase(){
    for(r:&roots){
        mark(*r)
    }
}

mark(obj){
    if(obj.mark == false){
        obj.mark = true
        for(child:children(obj)){
            mark(child)
        }
    }
}
  • 清除阶段
sweep_phase(){
    sweepObj = &heap_start
    while(sweepObj < heap_end){
        if(sweepObj.mark == true){
            sweepObj.mark = false
        }else{
            sweepObj.next = &freeList
            &freeList = sweepObj
        }

        sweepObj += sweepObj.size
    }
}

算法的优缺点和对应的改进方法

to be continued

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值