标记-清除算法

概念

标记-清除算法由标记阶段和清除阶段构成。标记阶段是把 所有活动对象都做上标记的阶段。清除阶段是把那些没有 标记的对象,也就是非活动对象回收的阶段。

标记阶段

collector会为堆里的所有活动对象(根)打上标记,然后递归地标记通过指针数组能访问到的对象。
深度优先搜索:尽可能从深度上搜索树形结构
广度优先搜索:尽可能从广度上搜索树形结构

清除阶段

遍历整个堆,将未标记的对象(非活动对象)新增到“空闲链表”中进行回收,在回收的过程中将连续的空间合并。“空闲链表”中的元素用于新对象的分配。

优点:

算法简单,与保守式GC算法兼容

缺点:

碎片化,因为无法移动对象。分配速度慢,因为需要在“空闲链表”中需要合适大小的分块。
posted @ 2022-07-14 10:50  bavaria  阅读(236)  评论(0)    收藏  举报