本文主要介绍了三色标记法的基本思路、多标导致的浮动垃圾、漏标的处理方案(读写屏障)等。
1. 垃圾回收的简单回顾关于垃圾回收算法,基本就是那么几种:标记-清除、标记-复制、标记-整理。在此基础上可以增加分代(新生代/老年代),每代采取不同的回收算法,以提高整体的分配和回收效率。
无论使用哪种算法,标记总是必要的一步。这是理算当然的,你不先找到垃圾,怎么进行回收?
垃圾回收器的工作流程大体如下:
标记出哪些对象是存活的,哪些是垃圾(可回收);
进行回收(清除/复制/整理),如果有移动过对象(复制/整理),还需要更新引用。
本文着重来看下标记的部分。
2. 三色标记法 2.1 基本算法要找出存活对象,根据可达性分析,从GC Roots开始进行遍历访问,可达的则为存活对象: