写点什么

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

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

    阅读完需:约 4 分钟

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

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

关注

评论

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

《程序员数学:使用Python进行3D图形,机器学习和仿真》PDF免费下载

计算机与AI

Python 学习 数学

二、关于大型复杂系统

数列科技杨德华

架构师视角 | 分布式缓存如何选择 ?

Java架构师迁哥

计算机网络基础

Minar Kotonoha

node.js 大前端 计算机网络 HTTP

区块链防伪溯源平台开发解决方案

t13823115967

区块链+ 区块链产品溯源

架构师训练营第三周学习总结

Geek_xq

我摊牌了,大厂面试Linux就这5个问题

艾小仙

Java Linux 面试 大厂

苦修月余,斩获bigo、腾讯offer,面经奉上!

艾小仙

Java 腾讯 面试 腾讯大厂

架构师训练营第 12 周总结

邓昀垚

我是怎么教我6岁女儿编程的

勇往直前的胖子

少儿编程

架构师训练营第十一周命题作业

一马行千里

极客大学架构师训练营 命题作业

分布式搜索引擎Elasticsearch的架构分析

vivo互联网技术

elasticsearch 分布式 分布式搜索引擎

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 学习 架构 面试 笔记

线上数据被回滚两次我都做了哪些不正确的操作

Gopher指北

MySQL 后端

传销组织的CTO | 法庭上的CTO(4)

赵新龙

CTO 传销 法庭上的CTO

Spock单元测试框架实战指南三 - f esle 多分支场景测试

Java老k

单元测试 spock

Redis 为什么这么快?这才是最完美的回答

Java架构师迁哥

自营电商渠道转化率的简单设计思路

boshi

推广

JVM垃圾回收?全面详细安排!

程序员的时光

JVM GC

培训是为了激发学员学习这门课的兴趣

boshi

职业 培训

让战略不再”空虚“的战略描述

Alan

战略思考 战略

话题讨论 | Vue凭什么成为2020的一匹黑马?

黑马腾云

话题讨论

架构师训练营第12周作业

邓昀垚

程序员有必要读研吗?

Java架构师迁哥

甲方日常 63

句子

工作 随笔杂谈 日常

架构师训练营第十一周学习笔记

一马行千里

学习 极客大学架构师训练营

vivo官方商城架构演进之路

vivo互联网技术

中台 架构演进 服务化

系统稳定性建设实践总结

架构精进之路

系统架构 自我思考 系统稳定性

LeetCode题解:45. 跳跃游戏 II,贪心正向查找,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

智慧公安大屏可视化决策系统搭建

t13823115967

智慧公安 智慧大屏可视化

DeFi质押挖矿APP系统开发|DeFi质押挖矿软件开发

系统开发

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