面试题答案
一键面试三色标记法工作原理
- 三色定义:
- 白色:表示尚未被垃圾回收器访问到的对象。在垃圾回收开始阶段,所有对象都是白色。
- 灰色:表示垃圾回收器已经访问到,但它引用的对象还未全部访问的对象。
- 黑色:表示垃圾回收器已经访问到,并且其引用的所有对象也都被访问过的对象。
- 标记过程:
- 初始阶段:从根对象(如全局变量、栈上的变量等)开始,将根对象标记为灰色,其他对象为白色。
- 标记阶段:垃圾回收器从灰色对象集合中取出一个灰色对象,将其所有引用的对象标记为灰色(如果这些对象原本是白色),然后将该灰色对象标记为黑色。不断重复这个过程,直到灰色对象集合为空。此时,所有可达对象(存活对象)都被标记为黑色,白色对象即为不可达对象(垃圾对象)。
标记存活对象
通过从根对象出发,沿着对象间的引用关系,将可达对象逐步标记为灰色再到黑色。只要一个对象能通过引用关系从根对象到达,最终就会被标记为黑色,从而被认定为存活对象。
清理垃圾对象
在标记结束后,所有白色对象都是垃圾对象。垃圾回收器会回收这些白色对象所占用的内存空间,将其重新标记为可用内存,供后续程序分配使用。