前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入浅出垃圾回收(三)增量式 GC

深入浅出垃圾回收(三)增量式 GC

作者头像
飞驰的西瓜
发布2022-07-26 15:38:38
5710
发布2022-07-26 15:38:38
举报
文章被收录于专栏:EmacsTalk

在上一篇文章中介绍的 MS 优化策略都是围绕 sweep 阶段展开,但 mark 阶段会导致应用程序挂起,也就是常说的:stop-the-world(STW),这严重影响了 Tracing GC 的应用场景。本文即将介绍的增量式 GC 可以大大缓解 STW 问题。

增量式思路

增量式(incremental)顾名思义,允许 mutator 与 collector 并行执行。 引用计数类 GC 本身就具有增量式特性,但由于其算法自身的缺陷与效率问题,一般不会采用。而追踪类 GC 实现增量式的难点在于:

在 collector 遍历引用关系图,mutator 可能会改变对象间的引用关系

这其实是一个并发问题,collector 线程与 mutator 线程同时去读/写一些共享的数据结构(引用关系图),这就要求把它保护起来,使 collecotr 与 mutator 能够感知其改变,并作出相应调整。 在 GC 期间,对 mutator 改变「引用关系图」的保守度(conservatism)是增量式 GC 大一特性。如果 mutator 在 collector 遍历某对象后将其释放(floating garbage),那么这个对象在本次 GC 不会被回收,但在下一轮 GC 开始时会被回收。 这种弱一致性(relaxed consistency)是允许的,因为它不会对程序逻辑造成影响,只是延迟了垃圾对象的回收,而且一致性越弱,遍历算法的实现就可以更灵活。

更多内容可点击https://liujiacai.net/blog/2018/08/04/incremental-gc/。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 EmacsTalk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档