gc机制
- 引用计数法
- 三色标记法
目标是为了缩短STW(stop the world)时间,提高程序时序性。
引用计数法基本原理
内存小于32kb
有使用引用时 计数+1
释放、置nil计数-1
当引用计数0时,垃圾回收工作。回收内存
三色标记法基本原理
内存大于32kb
- 扫描与标记阶段
起初所有对象都是白色
扫描找出所有可达对象,标记为灰色,放入待处理队列
从队列提取灰色对象,将其所有引用对象标记为灰色放入队列,自身标记为黑色
直到所有灰色变成黑色。
写屏障监视对象内存的修改,重新标色。
- 清理阶段
此时只剩下白色和黑色对象,将白色对象的内存收回。将所有黑色对象变为白色对象,完毕。
注意点
写屏障
gc运行的过程中,可以监控内存中对象的修改,并对对象进行重新标记
对象
白色:待清理对象
灰色:标记的中间状态,是可达的
黑色:活跃对象,其引用对象都是灰色或黑色