亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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:531369
用户头像

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

关注

评论

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

单口千兆以太网物理层芯片

智趣匠

多家高校设立“鸿蒙班”;ChatGPT 成为 Nature 年度十大人物丨 RTE 开发者日报 Vol.107

声网

开源大侠请留步!您有一份开源集市攻略!

开放原子开源基金会

Java 开源 程序员 开发者 算法

软件开发

Geek_8da502

怎么实现AI数字人7x24小时不间断直播?

青否数字人

数字人

图像处理AI软件推荐:Topaz Photo AI 激活直装版

胖墩儿不胖y

Mac软件 图像处理工具

INFINI Labs 产品更新 | Easysearch 新增快照搜索功能,Console 支持 OpenSearch 存储

极限实验室

console easysearch

探索分布式应用的未来:Canister智能合约

TinTinLand

建立海外SD-WAN专线网络的成本分析

Ogcloud

网络 SD-WAN 组网

人工智能与低代码:前端技术的双重变革

快乐非自愿限量之名

人工智能 前端开发 低代码

OpenHarmony创新赛圆满收官:引领开源趋势,开启创新技术新纪元

新消费日报

IoTDB 企业版 v1.3.0 发布 | 新增内生机器学习框架 AINode、权限模块全面升级等内容

Apache IoTDB

3D渲染买显卡还是用云渲染?3D渲染卡慢

3DCAT实时渲染

云渲染 实时云渲染

有OpenHarmony技术问题,上Laval社区

Geek_2d6073

图说技术:我的技术文章配图实践经验

Java 工程师蔡姬

技术人 21 天技术人写作行动营

系统综合清理优化推荐 MacCleaner 3 Pro 激活中文版

mac大玩家j

系统优化 Mac软件 系统优化工具

AI数字人直播的完整教程!

青否数字人

数字人

AI数字人源码的售后保障!

青否数字人

数字人

2023年中国游戏产业年会:鸿蒙全链路赋能游戏产业可持续发展

新消费日报

如何使用 NFTScan NFT API 在 Viction 网络上开发 Web3 应用

NFT Research

NFT NFT\ NFTScan

数据库:mysqldump用法详解

百度搜索:蓝易云

MySQL Linux 运维 mysqldump 云服务器

GaussDB整体性能慢分析教程。

百度搜索:蓝易云

云计算 Linux 运维 GaussDB 云服务器

Cilium CNI深度指南

俞凡

Kubernetes 云原生 网络 通信

软件对于企业的关键价值点在哪里?

天津汇柏科技有限公司

软件

一文详解 BRC20 衍生品协议 Bitcat,铭文市场长期发展的助推

威廉META

Vue 2 即将停止更新

南城FE

JavaScript Vue 前端开发

MacCleaner 3 Pro中文激活:Mac电脑强大的清理优化软件

胖墩儿不胖y

优化软件 Mac软件推荐 系统优化工具

拼多多ID取商品详情API:电商行业的秘密武器与实时数据获取的智慧之路

Noah

诚邀报名 | 技术创新,照见未来——共建OpenHarmony,共赴开源世界

开放原子开源基金会

Java 开源 程序员 开发者 算法

【PHP】thinkPHP6中的MVC思想的小案例

Geek_Angel

php mvc thinkphp6

一文详解 BRC20 衍生品协议 Bitcat,铭文市场长期发展的助推器

鳄鱼视界

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