回答
三色标记算法是一种用于垃圾回收的标记-清除算法,主要用于解决对象的可达性问题。它通过将对象分为三种颜色来追踪其状态,分别是白色、灰色和黑色:
- 白色:还没扫描过的对象,标记为白色。同时,也可表达为对象不可达,GC 将会回收该颜色的对象
- 灰色:扫描过该对象,但还没完全扫描过它全部引用的对象,标记为灰色
- 黑色:扫描过该对象,且已该对应的引用已全部扫描完成,标记为黑色
详解
为什么引入三色标记算法
在面试题 JVM 是如何判断对象是否存活?中,大明哥讲到 JVM 判断对象是否存活的算法有两种:引用计数法和可达性分析算法,JVM 主要采用可达性分析算法,但是可达性分析算法整个过程都需要 STW ,大大影响应用的整体性能,同时,它还存在误标记的问题。
为了解决对象的可达性问题和效率问题,引入三色标记算法。
三色标记算法
三色标记放将对象分为三种颜色:
- 白色:还没扫描过的对象,标记为白色。如果在标记阶段结束后,对象依然为白色,则表明其不可达,可以被回收。
- 灰色:扫描过该对象,但还没完全扫描过它全部引用的对象,标记为灰色
- 黑色:扫描过该对象,且已该对应的引用已全部扫描完成,标记为黑色