电子书下载连接ios
一图总结文章内容git
标记清除法是一种找到垃圾的方法,就是分红两个步骤,标记和清除,标记是从根部除法作搜索,通过的则标记,清除是从堆遍历 找到没有使用则清除。
github
标记使用什么搜索方式呢?广度搜索、深度搜索,这个过程是要中断对象操做的,不中断的话,新生成的对象 就可能不可达。算法
在清除阶段,咱们使用变量 sweeping 遍历堆,具体来讲就是从堆首地址 $heap_start 开始,按顺序一个个遍历对象的标志位。学习
这里的分配是指将回收的垃圾进行再利用。遍历 $free_list,寻找合适的 size 的分块就是分配阶段。
First -fit、Best -fit、Worst -fit 的不一样:
视频
前文中已经提过,根据分配策略的不一样可能会产生大量的小分块。但若是它们是连续的, 咱们就能把全部的小分块连在一块儿造成一个大分块。这种“链接连续分块”的操做就叫做合 并(coalescing),合并是在清除阶段进行的。对象
利用分块大小不一样的空闲链表,即建立只链接大分块的空 闲链表和只链接小分块的空闲链表。进程
将大小相近的对象整理成固定大小的块进行管理的作法内存
我的对这里有新理解: 全部的对象,一旦对象不在根部有引用,那么这个对象就不可能再被引用,标记后,没有被标记的对象必定是非活动对象了,可是新产生的对象再后续的发展中 可能成为非活动对象也可能成为非活动对象,那么这些新对象都标记不能被清除,所以没有标记的对象是能够延迟清除的,不会再次被标记。可是要注意新对象都要标记。ci
我的简介:高级开发工程师,兴趣和领域(Unity、Unreal、cocos creator、安卓终端开发、ios终端开发、音视频开发、图形学),欢迎加W:wlxklyh 探讨问题。(欢迎star:https://github.com/wlxklyh/SoftRenderer)