短视频
2025/12/30大约 2 分钟面试题面试题
来源:短视频
最近有一位工作 3 年的粉丝,在后台留言 面试的时候被问到什么是三色标记法?当时一脸懵逼,天天 CRUD,三色标记是什么鬼啊。
其实三色标记法是Java虚拟机中一种用于垃圾回收的算法,主要是用于标记内存中的对象,好确定哪些对象是存活的,哪些对象是可以被回收的。
这种算法将内存中的对象分为三种颜色:白色 黑色 灰色
白色代表对象还没被扫描过,我们可以理解为是未知状态。
黑色代表对象已经被扫描过,但是 它的引用对象还没被有扫描过。
灰色代表对象已经被扫描过了, 并且它的引用对象也全都被扫描过了,我们可以理解为是已知状态。
在GC开始的时候会将所有对象都标记为白色。
然后从根对象开始遍历内存中的对象,遍历过程中它会把直接引用对象都标记为灰色,并且把它们加入到灰色集合中。
接着呢,会逐个判断灰色集合中的对象是否存在子对象
如果存在就继续放入灰色集合中,如果不存在就标记为黑色,放入到黑色集合中。
然后重复这个过程,直到灰色集合处理为空,也就代表这一轮标记就完成了。
最终,所有存活的对象都会被标记为黑色,而未被标记的白色对象就是待回收的垃圾对象。
而垃圾回收器通过三色标记算法 在一定程度上减少了** gc 停顿时间,提高了系统的性能和响应速度**。
以上就是我对三色标记法的理解。