美文网首页
Swift实现mark-sweep算法及相关文章推荐

Swift实现mark-sweep算法及相关文章推荐

作者: 黄二瓜 | 来源:发表于2020-11-18 18:07 被阅读0次

本文主要用Swift 来模拟定义对象、头、域、堆以及空闲链表,并实现标记与清除两个阶段算法来帮助理解,简单实现mark-sweep算法思路,不包含对象分配过程。完整代码见mark-sweep.swift

参考文章 推荐

头信息定义

class HeaderInfo {
    var name: String 
    var size: Int
    var marked: Bool
    init(_ name: String, size: Int) {
        self.name = name
        self.size = size
        marked = false
    }
}

对象定义

class Obj {
    var head: HeaderInfo //头信息
    var field: Obj? //域
    init(_ headInfo: HeaderInfo) {
        head = headInfo
    }
}

堆定义: 用来模拟内存中堆状态

class Heap {
    var usedSize: Int = 0
    var maxSize: Int
    private var _objs: [Obj] = [] //记录堆中对象
    
    init(_ maxSize: Int) {
        self.maxSize = maxSize
    }

    var objs: [Obj] {
        get {return _objs}
    }
    
    func appendObj(_ obj: Obj) {
        usedSize += obj.head.size
        _objs.append(obj)
    }
}

空闲链表定义:

class Node {
    var next: Node?
    var data: Obj?
}

标记阶段:

private func markPhase() {
    for obj in roots {
        mark(obj)
    }
}
// 标记对象
private func mark(_ obj: Obj) {
    if obj.head.marked == false {
        obj.head.marked = true
        if let child = obj.field {
            mark(child)
        }
    }
}

清除阶段:

private func sweepPhase() {
    for obj in heap.objs {
        if obj.head.marked {
            obj.head.marked = false
        } else {
            //非活动对象加入到空闲列表
            obj.head.name = "FreeChunk" //需要被重新分块的对象
            let freeNode =  Node()
            freeNode.data = obj
            freeNode.next = freeList
            freeList = freeNode
        }
    }
}

相关文章

  • Swift实现mark-sweep算法及相关文章推荐

    本文主要用Swift 来模拟定义对象、头、域、堆以及空闲链表,并实现标记与清除两个阶段算法来帮助理解,简单实现ma...

  • 垃圾回收算法

    这里主要是阐明各算法的实现思想,而不去细论算法的具体实现 标记—清除算法(Mark-Sweep) 标记—清除算法是...

  • 4种垃圾收集算法及8种垃圾收集器

    文主要介绍4种垃圾收集算法及8种垃圾收集器: 垃圾收集算法 1、标记-清除算法(Mark-Sweep) “标记-清...

  • Flutter 搭建具有 Drawer 和 BottomNavi

    文章目录 相关文章推荐 实现效果 实现分析首页实现侧边栏实现 源码 相关文章Flutter Widget 静态布局...

  • 推荐排序

    如果对推荐算法感兴趣可以看我的文档整理:推荐算法相关的文档整理 其它相关文章整理:https://zhuanlan...

  • 2019-05-23

    UserCF  本系列文章主要介绍推荐系统领域相关算法原理及其实现。本文以项亮大神的《推荐系统实践》作为切入点,介...

  • JS简单实现决策树(ID3算法)

    推荐阅读:ID3算法 wiki决策树算法及实现完整示例代码:JS简单实现决策树(ID3算法)_demo.html ...

  • Swift 算法实战之路:链表

    上期我们探讨了使用Swift如何破解数组、字符串、集合、字典相关的算法题。本期我们一起来讲讲用Swift如何实现链...

  • GC算法

    GC算法包括: 新生代: 标记清除算法(mark-sweep),复制算法(copying) 老年代:标记整理算法(...

  • GC 算法

    标记-清除算法 最基础的收集算法是 “标记-清除”(Mark-Sweep)算法,顾名思义,算法分为 “标记” 和 ...

网友评论

      本文标题:Swift实现mark-sweep算法及相关文章推荐

      本文链接:https://www.haomeiwen.com/subject/mvcfiktx.html