垃圾回收算法优缺点对比

本文探讨了多种垃圾回收算法,包括标记-清除法、引用计数法、复制算法、标记-压缩算法、保守式GC和分代垃圾回收。各种算法有各自的优缺点,如标记-清除法实现简单但可能导致碎片化,引用计数法能即时回收垃圾但有循环引用问题,复制算法具有高效分配但堆利用率低,标记-压缩算法有效利用堆但压缩成本高。保守式GC和分代垃圾回收分别在语言处理和吞吐量方面有优势,但也存在识别指针成本和最大暂停时间的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5401760-4176fdc0cef5e748.png
image.png

GC之前

说明:该文中的GC算法讲解不仅仅局限于某种具体开发语言。

mutator

mutator 是 Edsger Dijkstra 、 琢磨出来的词,有“改变某物”的意思。说到要改变什么,那就是 GC 对象间的引用关系。不过光这么说可能大家还是不能理解,其实用一句话概括的话,它的实体就是“应用程序”。这样说就容易理解了吧。GC 就是在这个 mutator 内部精神饱满地 工作着。

mutator 实际进行的操作有以下 2 种。

  • 生成对象
  • 更新指针

mutator 在进行这些操作时,会同时为应用程序的用户进行一些处理(数值计算、浏览网页、 编辑文章等)。随着这些处理的逐步推进,对象间的引用关系也会“改变”。伴随这些变化会 产生垃圾,而负责回收这些垃圾的机制就是 GC。

活动对象 / 非活动对象

我们将分配到内存空间中的对象中那些能通过 mutator 引用的对象称为“活动对象”。反 过来,把分配到堆中那些不能通过程序引用的对象称为“非活动对象”。

根(root)这个词的意思是“根基”“根底”。在 GC 的世界里,根是指向对象的指针的“起点” 部分。

这些都是能通过 mutator 直接引用的空间。

评价标准

评价 GC 算法的性能时,我们采用以下 4 个标准。

  • 吞吐量
  • 最大暂停时间
  • 堆使用效率
  • 访问的局部性

其他信息(Java语言为例):JVM解读-GC(垃圾回收)


1 标记-清除法

优点

①实现简单

说到 GC 标记 - 清除算法的优点,那当然要数算法简单,实现容易了。
另外,如果算法实现简单,那么它与其他算法的组合也就相应地简单。

②与保守式 GC 算法兼容

后面介绍的保守式 GC 算法中,对象是不能被移动的。因此保守式 GC 算法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值