NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

SGen:Mono 的生代式垃圾收集器

  • 2011-01-27
  • 本文字数:729 字

    阅读完需:约 2 分钟

从 API 角度来看,Mono 正紧紧跟随着.NET 的脚步大踏步前进着,但有个关键领域 Mono 却落后了。Mono 中默认的垃圾收集器采用的是可移植、但却不太精确的 Boehm-Demers-Weiser 保守式垃圾收集器。Boehm 垃圾收集器的主要问题在于无法精确读取寄存器与栈帧。因为无法确定给定值到底是指针还是标量,因此它总是假设给定值是指针,并且将相关联的对象标记为存活状态。这么做不仅会错误导致大块内存无法分配,同时还使得压缩可用空间这项工作变得异常艰难。

SGen(Simple Generational)是 Mono 新一代的垃圾收集器。见名知意,这个持续了两年的项目正尝试替代 Mono 原来的垃圾收集器,它使用精确的分代式(generational)垃圾收集器,类似于.NET 版本的 CLR。SGen 垃圾收集器使用两生代而非.NET 中的三个,但像.NET 一样对于大对象使用独立的堆。

Mono 2.10 之前(现在仍处于预览版),SGen 仍旧是保守的。新版本增加了对托管栈帧的精确收集的支持,这样基本就不会遇到误报的问题了。来自于 p/invoke 调用的非托管栈帧仍旧使用保守的方式扫描。

类似于.NET,SGen 最大的缺陷在于固定对象。如果将对象固定在 SGen 中(想想.NET 中的 0 生代),那么它就无法彻底清除,这会导致内存碎片。由于几个原因,SGen 的这个问题甚至更糟。你不仅需要处理碎片,而且 SGen 需要从这些碎片中分配内存。理想情况下,所有的活动对象都应从 SGen 中复制出来,并且得到重用。

为了解决这些问题,SGen 并不仅仅像.NET 那样检测显示的固定对象。如前所述,对非托管栈帧的保守式扫描会导致对象的固定,这是因为栈中的数字值可能碰巧与内存地址一样。据推测,随着与 p/invoke 调用相关的逻辑变得更加可靠,这将在未来的版本中得到修复。

查看英文原文: SGen: Mono’s Generational Garbage Collector

2011-01-27 02:531363
用户头像

发布了 88 篇内容, 共 258.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

记一次TiDB优化

TiDB 社区干货传送门

性能调优

PD 关于ID分配的源码分析

TiDB 社区干货传送门

TiDB 底层架构

【SOP 系列】TiDB 使用 SOP 最全合集

TiDB 社区干货传送门

TiDB 底层架构

TiDB 4.0 新特性也太爽了吧

TiDB 社区干货传送门

版本测评

TiDB系统调参实战经验

TiDB 社区干货传送门

性能调优 实践案例

TiDB 5.1 发版,打造更流畅的企业级数据库体验

TiDB 社区干货传送门

新版本/特性发布

DELETE Statement,懂你不容易

TiDB 社区干货传送门

TiDB 底层架构

Spring IOC II

武师叔

7月月更

TiDB 目录结构分析

TiDB 社区干货传送门

实践案例

TSO 时间戳转换为自然时间

TiDB 社区干货传送门

实践案例

成年人的周末 2022.7.10

贾献华

7月月更

价值几十万的 TiDB优化

TiDB 社区干货传送门

实践案例

悲观事务加锁验证

TiDB 社区干货传送门

管理与运维

TiDB GC 之原理浅析

TiDB 社区干货传送门

TiDB 底层架构

SpringBoot核心应用第一弹

Java学术趴

7月月更

Spring&SpringBoot 源码笔记整理 |Bean 的加载流程一

自由

Spring5源码解析 7月月更

【TiDB 最佳实践系列】如何高效利用 Grafana 监控分析 TiDB 指标?

TiDB 社区干货传送门

监控

前端食堂技术周刊第 44 期:Bun、Vue.js 挑战、React 状态管理的新浪潮、Can I DevTools、函数式编程

童欧巴

Vue React Bun

TiDB 在网易游戏的应用实践

TiDB 社区干货传送门

实践案例

TiFlink: 使用 TiKV 和 Flink 实现强一致的物化视图

TiDB 社区干货传送门

实践案例 TiDB 底层架构

Tidb灾难恢复演练-多副本丢失

TiDB 社区干货传送门

故障排查/诊断

小区搜索过程

柒号华仔

5G 7月月更

排序算法总结

乌龟哥哥

7月月更

TiDB+FLINK 实时计算

TiDB 社区干货传送门

实践案例

当大数据架构遇上 TiDB

TiDB 社区干货传送门

实践案例

一条 like 条件的慢 SQL 语句优化

TiDB 社区干货传送门

管理与运维

从一个简单的Delete删数据场景谈TiDB数据库开发规范的重要性

TiDB 社区干货传送门

故障排查/诊断

PD 关于tso 分配源代码分析

TiDB 社区干货传送门

TiDB 底层架构

继承

Jason199

js 继承 7月月更

TiDB升级5.0.2有惊喜

TiDB 社区干货传送门

版本测评

TIDB 入门运维基础视频教程(一)-- 快速体验

TiDB 社区干货传送门

安装 & 部署

SGen:Mono的生代式垃圾收集器_.NET_Jonathan Allen_InfoQ精选文章