写点什么

采用位图标记技术的垃圾收集器将会大幅改善内存占用

  • 2012-02-10
  • 本文字数:1122 字

    阅读完需:约 4 分钟

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

Ruby 1.9.3 最重要的特性就是引入了惰性垃圾收集清理器,这项工作是由中村成洋(InfoQ 此前有过相关报道)完成的,它极大地降低了最坏情况下垃圾收集器所需要的时间。在近期的一份文档中,中村成洋表示他已经实现了写时拷贝的位图标记垃圾收集器(简记bmap),这个收集器和Ruby 企业版的写时拷贝垃圾收集器很类似,都是通过使用POSIX 的fork 系统调用来降低内存需要,这个调用的巧妙之处在于让子进程共享父进程的内存,除非有修改才会拷贝。不幸的是,当前的Ruby 收集器并没有很好地利用这个特性

Ruby 使用的是标记清除垃圾收集技术。这项技术的特点是,垃圾收集器首先会遍历所有的对象,然后标记哪些正在使用,即设置 FL_MARK 标记位。然后收集器将会再遍历所有的对象,删除没有被标记的对象,并且释放空间。不过,问题是,这种技术和写时拷贝逻辑上有冲突:收集器可能会把所有的页都标记为脏。

InfoQ 联系了了中村成洋,希望得知他的 bmap 实现是如何改善现有惰性垃圾收集器的缺陷。他指出,位图标记算法拥有如下几个优点:

  • 相比每个对象有个头部位标记,位图对存储空间利用更加高效
  • 高局部性
  • 标记不会修改任何对象。而且清理也不会修改任何活动对象
  • 非常适合写时拷贝,脏缓存行很少
  • 我们使用 memset 来重置标记位
  • 清除操作将会快一些

在 CRuby 中,写时拷贝是非常重要的。Linux 环境下,位图标记技术将会显著改善使用 fork 程序的内存使用情况。而且在 CRuby 中,使用 fork 可以大幅提高并行性能。不仅如此,在库支持方面,也有很多采用了 fork 的库可供使用。(例如 Unicorn Resque

InfoQ:但是从性能方面来看,惰性垃圾搜集器降低了吞吐量,而且 bmap 也比当前的垃圾收集器略微慢一些。bmap 将会代替现有的垃圾收集器么?或者开发者和用户可以通过配置来选择使用哪种垃圾收集器?

我的计划是位图标记垃圾收集器将会是默认的垃圾收集器。至于你所提到的“bmap 略微慢一些”,的确是这样,不过,我认为性能下降程度仍然是在所有人可以接受的范围内。所以,我觉得用户并不需要这样的配置。

InfoQ:你也提到了你准备将位图标记技术应用到并行垃圾收集器中。听起来这将会大幅提高垃圾收集器性能,你能否透露一下这项技术将能够能够提高大概多少性能么(或者减少多少停顿时间)?

事实上我已经编写出了无位图标记技术的并行垃圾收集器。在某些情况下,我能够将运行在双核机器上的垃圾收集器性能提高 40%。应用位图标记技术之后,性能只会有微量降低。 我在 RubyConf US 2011 上已经详细地阐述了并行垃圾收集器(视频幻灯片)。

松本行弘也将位图标记垃圾收集器提交到了Ruby 代码库中,它将会随着下一个版本一同发布,我们认为这个版本将会是2.0 版。

查看英文原文: Bitmap Marking GC for Ruby Improves Memory Usage

2012-02-10 17:131682
用户头像

发布了 90 篇内容, 共 33.4 次阅读, 收获喜欢 5 次。

关注

评论

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

「乐」话题王者第二季,欢乐开赛

InfoQ写作社区官方

InfoQ 牛年特别策划

Linux Lab 进阶: 自动化测试

贾献华

Linux 测试 Linux Kenel

【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)

五分钟学大数据

大数据 hadoop 2月春节不断更

第一性原理

熊斌

学习 2月春节不断更

【LeetCode】最长湍流子数组

Albert

算法 LeetCode 2月春节不断更

我的2020年学习总结

兆熊

学习 总结

「春」写作平台春节精选话题

InfoQ写作社区官方

InfoQ 牛年特别策划

话题讨论 | 程序员表白,不光需要“技术”,更需要勇气!

孙叫兽

程序员 话题讨论 情人节 表白

架构进阶之路:复杂业务开发与领域驱动设计

程序员架构进阶

架构 方法论 七日更 28天写作 2月春节不断更

每周总结(2月1日-2月7日)

Nydia

4. 列表一学完,Python 会一半,滚雪球学 Python

梦想橡皮擦

python 爬虫 Python Monad 2月春节不断更

Elasticsearch Mapping

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

别困惑,不是你的错!90%的开发者把Clubhouse看成了Clickhouse

京东科技开发者

Clickhouse 社交 clubhouse

如何防止手机被盗刷

石云升

2月春节不断更 手机盗刷

填补国内空白!建信金科携手本源量子发布国内首批量子金融算法

金科优源汇

面试官系列:讲几个分布式自增ID的方案?

后台技术汇

28天写作 2月春节不断更

产品 0 期 - 前三周大作业

Jxin

作业之用例

踏凌霄

LeetCode题解:153. 寻找旋转排序数组中的最小值,二分查找,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

互联网医疗里,用户需要的是什么

卢嘉敏

需求 医疗 用户

当自动驾驶遇到5G,会擦出怎样的火花?这篇文章说明白了

华为云开发者联盟

人工智能 自动驾驶 AI 5G

自动驾驶“绝地求生”结束了,但深兰的造车故事才刚刚开始

脑极体

什么是SNMP

MyBatis专栏 - 关联查询之一对一

小马哥

Java mybatis 七日更 二月春节不断更

Web页面制作基础

我是哪吒

学习 程序员 面试 大前端 二月春节不断更

「快」2月春节不断更

InfoQ写作社区官方

InfoQ 牛年特别策划

「新」春节新用户注册福利

InfoQ写作社区官方

InfoQ 牛年特别策划

某挂号平台在线挂号用例

侠女马姑娘

产品经理训练营

这个技术把时间切开,让生命愈合

脑极体

说说Golang goroutine并发那些事儿

华为云开发者联盟

线程 进程 并发 goroutines Go 语言

有了这个算法,图像上文字擦除再也用不上PS了

华为云开发者联盟

深度学习 算法 GAN 文字擦除 图像

采用位图标记技术的垃圾收集器将会大幅改善内存占用_Ruby_Mirko Stocker_InfoQ精选文章