17.1 概述
三色标记和写屏障
这是让标记和用户代码并发的基本保障,基本原理:
- 起初所有对象都是白色的。
- 扫描找出所有可达对象,标记为灰色,放入待处理队列。
- 从队列提取灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色。
- 写屏障监视对象内存修改,重新标色或放入队列。
当完成全部扫描和标记工作后,剩余的不是白色就是黑色,分别代表待回收和活跃对象,清理操作只须将白色对象内存收回即可。
我的问题:
- 什么叫可达对象?
- 其引用对象是指什么?
- 写屏障是什么东东?具体运行机制是什么样的?
控制器
控制器全程参与并发回收任务,记录相关状态数据,动态调整运行策略,影响并发标记单元的工作模式和数量,平衡CPU资源占用。当回收结束时,参与next_gc回收阈值设置,调整垃圾回收触发频率。
辅助回收
某些时候,对象分配速度可能远快于后台标记。这会引发一系列恶果,比如堆恶性扩张,甚至让垃圾回收永远无法完成。
此时,让用户代码线程参与后台回收标记就非常有必要。在为对象分配堆内存时,通过相关策略去执行一定限度的回收操作,平衡分配和回收操作,让进程处于良性状态。