概述
标记清除算法, 描述起来很简单, 从名字上就能看出, 分为两个阶段:
标记阶段: 遍历所有对象, 将活动对象都打上标记
清除阶段: 遍历堆, 将没有标记的对象释放掉.
介绍完毕, 本文结束....这里其实还有一个优化的小方向, 开始的时候忘记了. 为了提高查找内存时速度, 可以将空闲链表按照大小进行区分, 这样, 需要多大的内存, 直接到对应的链表中找就行了....虽然实现写的很粗糙, 但大致意思有了.
问题
1.内存的碎片化
从上面可以看到, 只对内存进行了清除, 但是没有整理. 而内存的申请又是动态的, 就会导致出现很多离散的小片空闲内存....为了解决标记清除算法的问题, 衍生出了位图标记法, BiBOP法 ,延迟清除算法等等个人感觉很鸡肋(好吧, 或许是我未得其精髓).
----
为了解决标记清除的问题, 有衍生出了 标记复制 , 标记整理...算法, 之后再议.