垃圾回收算法中的引用计数法是如何工作的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2349个文字,预计阅读时间需要10分钟。
本篇简要介绍一种基本的回收算法:引用计数法(Collins,1960;reference counting)。引用计数法非常简单。对象的生存性可以通过引用关系直接通过创建和删除引用来判断。因此,无需引用计数。
本文介绍将简要介绍一种基本的回收算法:引用计数算法[Collins,1960],英文名 reference counting。
引用计数方法非常简单。对象的存活性可以通过引用关系的创建和删除直接判定,从而无需向追踪式回收器那样先通过遍历堆找出所有的存活对象,然后再反向确定出未遍历到的垃圾对象。
引用计数算法基于计算对每个分配对象的指针引用数的想法。这是一种直接的方法,也恰好是自然增量的,因为它在整个程序中分配内存管理开销。
该算法依赖于一个非常简单的不变式:当且仅当指向某个对象的引用数量大于 0 时,该对象才有可能是存活的。
那么该算法是怎么运作的呢?
引用计数怎么运作?
在引用计数方法下,每个分配的对象都包含一个引用计数字段。
内存管理器负责维护不变量,即每个对象的引用计数始终等于对该对象的直接指针引用的数量,当创建或者删除某一对象的引用时增加或减少该对象的引用计数。
下面给出了该算法的基本版本:
- new 方法:用来创建一个对象,new() 分配一个新对象。为简洁起见,我们忽略了对象类型,假设所有对象的类型和大小都相同。
本文共计2349个文字,预计阅读时间需要10分钟。
本篇简要介绍一种基本的回收算法:引用计数法(Collins,1960;reference counting)。引用计数法非常简单。对象的生存性可以通过引用关系直接通过创建和删除引用来判断。因此,无需引用计数。
本文介绍将简要介绍一种基本的回收算法:引用计数算法[Collins,1960],英文名 reference counting。
引用计数方法非常简单。对象的存活性可以通过引用关系的创建和删除直接判定,从而无需向追踪式回收器那样先通过遍历堆找出所有的存活对象,然后再反向确定出未遍历到的垃圾对象。
引用计数算法基于计算对每个分配对象的指针引用数的想法。这是一种直接的方法,也恰好是自然增量的,因为它在整个程序中分配内存管理开销。
该算法依赖于一个非常简单的不变式:当且仅当指向某个对象的引用数量大于 0 时,该对象才有可能是存活的。
那么该算法是怎么运作的呢?
引用计数怎么运作?
在引用计数方法下,每个分配的对象都包含一个引用计数字段。
内存管理器负责维护不变量,即每个对象的引用计数始终等于对该对象的直接指针引用的数量,当创建或者删除某一对象的引用时增加或减少该对象的引用计数。
下面给出了该算法的基本版本:
- new 方法:用来创建一个对象,new() 分配一个新对象。为简洁起见,我们忽略了对象类型,假设所有对象的类型和大小都相同。

