AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

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

关注

评论

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

最新版CorelDRAW Technical Suite2022

茶色酒

cdr2022

微博评论架构设计

泋清

#架构训练营

TTChat x Zadig 开源共创 Helm 接入场景,环境治理搞得定!

Zadig

DevOps 微服务 音视频 测试环境治理

深入浅出总结Flink运行时架构

百思不得小赵

大数据 flink 6月月更

妙!妙盈科技全面实施 Zadig 助力容器化建设,全面拥抱 Kubernetes 和云原生

Zadig

DevOps CI/CD 容器化 自动化运维 Zadig

大数据培训 | Flink SQL窗口表值函数聚合实现原理

@零度

flink 大数据开发

CTO专访:合见工软深化产品布局 加速国产EDA技术革新

科技热闻

SOFARegistry 源码|数据同步模块解析

SOFAStack

源码解析 注册中心 数据同步 开源软件

什么是外链和内链?

源字节1号

前端开发 后端开发 网站开发

助力极致体验,火山引擎边缘计算最佳实践

火山引擎边缘云

云计算 边缘计算 低时延 边缘云原生 边缘网络

钛动科技:我们的 Zadig 落地之路

Zadig

DevOps 持续交付 企业出海 研发效率

架构实战营|模块5

KDA

#架构实战营

中科方德技术专家直播:如何基于 OpenStack、Ceph 构建私有云平台? | 第 27 期

OpenAnolis小助手

Ceph 龙蜥大讲堂 中科方德 OpenStack 私有云平台

java就业培训 | 怎么实现 SpringBoot 并行任务

@零度

JAVA开发 springboot

亲测!Centos7部署PHP + Swoole

迷彩

Apache Linux 微服务 swoole 6月月更

iMile 利用 Zadig 多云环境周部署千次,跨云跨地域持续交付全球业务

Zadig

DevOps 微服务架构 CI/CD 持续交付 国际化

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书

图灵教育

编译原理 go语言

面试突击61:说一下MySQL事务隔离级别?

王磊

Java java面试

【Go实现】实践GoF的23种设计模式:装饰者模式

元闰子

Go 设计模式 装饰器 装饰者模式

高效远程办公的基石:有效沟通 |社区征文

wljslmz

远程办公 初夏征文

悬赏平台并没有WEB端开发,在原生开发和混合开发中哪种合适?

开源直播系统源码

软件开发 app源码 原生开发 混合开发 悬赏平台源码

Vue3中如何使用异步请求?

Python研究所

6月月更

高校如何基于云原生构建面向未来的智慧校园?全栈云原生架构VS传统IT架构

York

云原生 数字化转型 智慧校园 教育科技

易快报:我们用 Zadig 实现万次构建部署,聪明运维,释放开发生产力

Zadig

DevOps 微服务架构 CI/CD 容器化 Zadig

年轻就要醒着拼,年轻就要勇于尝试

Zadig

DevOps 微服务治理 自动化运维 企业案例

影响LED封装散热主要因素有哪些?

Dylan

LED LED显示屏 led显示屏厂家

基于字节码的统一异常上报实践

转转技术团队

异常机制 Java’

ONES 创始人王颖奇对话《财富》(中文版):中国有没有优秀的软件?

万事ONES

架构实战营第五模块课后作业

Geek_53787a

架构实战营

8年打磨,《游戏设计梦工厂》发布史诗级更新!

博文视点Broadview

rxjs Observable 设计原理背后的 Pull 和 Push 思路

汪子熙

typescript 响应式编程 angular RXJS 6月月更

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