增量式垃圾回收

本文介绍了增量式垃圾回收的基本原理和实现过程,包括数据结构的设计、算法执行的各个阶段,如初始化、增量标记、生成新对象、访问对象以及全量GC。重点讨论了增量标记在减少停顿时间方面的策略,以及为何需要拦截写操作来确保正确性。
摘要由CSDN通过智能技术生成

简单的增量式垃圾回收

通过这段时间对tinypy源码和编译原理这本书的研究,我终于敲开了增量式垃圾回收的“小门”;如果读者没有接触过基本的标记-清扫垃圾回收,最好先对其进行一定的了解。

一、数据结构

列表:

  • 所有对象集合,标记为R,
  • 未扫描对象集合,标记为U,
  • 垃圾对象集合,标记为G

二、算法的理论基础

  • 不可达对象永远不会变成可达对象。
  • 树的遍历(增量标记的核心)

三、算法的执行过程

初始化

  • 初始化栈和对象的树;
  • 将根对象push进U;

增量标记

(实质上是对可达对象的树进行广度优先的遍历过程,这个过程中会产生一些被称之为“漂浮垃圾”的对象,他们已经不可达,但是仍然在U集合里面,由于他们不可能再次被引用,所以在下一轮FullGC过程中会被清除)

  • 从U中pop出一个对象
  • 如果该对象已经标记为1,退出过程
  • 如果该对象有子节点,将子节点push进U
  • 标记该对象为1
  • (这个过程也可以增量清除G中的垃圾对象)

生成新对象

  • 标记该对象为1
  • 将新对象push进U
  • 执行两步增量标记,保证U不断减小
  • 如果U为空,则表明所有对象都被标记过了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值