Skip to content

三色标记算法

三色标记算法通过将对象分为三种颜色状态来追踪和管理内存中的对象。这种方法常用于实现高效的垃圾回收机制,尤其是现代的JVM中。三色标记算法的颜色状态包括 白色黑色灰色,每种颜色代表了对象的不同生命周期状态。

1. 工作流程

初始化:所有对象最初都被标记为白色。 根节点扫描:垃圾回收器从一组根对象(如全局变量、活动线程栈上的局部变量等)开始,将这些根对象标记为灰色。 对象图遍历: 垃圾回收器选择一个灰色对象,将其变为黑色。 随后,垃圾回收器将该对象直接引用的所有白色对象标记为灰色。 这个过程会不断重复,直到没有更多的灰色对象为止。 完成:当所有可到达的对象都被标记为黑色后,所有剩余的白色对象则被视为垃圾并被回收。 并发标记的问题 在并发标记的过程中,由于应用程序线程仍在运行,可能会出现以下几种情况:

漏标:一个原本是白色的对象,在被垃圾回收器访问之前变成了黑色对象的引用对象,从而没有被正确地标记为灰色。 误标:一个原本是黑色的对象,由于应用程序的操作而不再被任何其他对象引用,但仍然保持黑色状态,导致内存泄露。 为了应对这些问题,现代垃圾回收器采用了多种技术,如使用读写屏障来记录对对象引用的修改,确保在并发标记过程中能够准确地追踪对象的状态变化。

Released under the MIT License.