BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Ruby 2.1迁到分代式垃圾收集,以应对其在大规模部署方面所遭受的批评

| 作者 Manuel Pais 关注 9 他的粉丝 ,译者 马德奎 关注 0 他的粉丝 发布于 2013年9月22日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Ruby的创建者Matz于上周末在Baruco(Barcelona Ruby会议)上宣布,Ruby MRI 2.1将迁到分代式垃圾收集(GC),此举有望成为这门语言的一项重要性能提升。Ruby 2.1预计在今年年底前发布。

巧合的是,在当天的另一场演讲中,Github的Vicent Marti强烈地批评了Ruby MRI的垃圾收集实现方式,将当前的标记&清除算法称为“双头怪兽”。Vicent阐述了Ruby GC的局限性如何经常影响Github这样一个大规模的Ruby部署。

一方面是由于标记阶段缓慢(这一阶段实际上会停止应用程序,并顺序遍历整个对象图以确定活动对象)。另一方面是由于清除阶段不准确,它可能最终清除实际上仍在使用的C扩展(或C扩展指向的)Ruby对象。

Vicent提到,使用诸如Valgrind这样的工具或者预先执行静态分析有助于减少此类问题,但他也强调,Ruby MRI目前的GC实现方式存在根本缺陷,并建议,一旦JRubyRubinius实现了与MRI同样的功能集,就将大规模的Ruby部署向JRuby或Rubinius迁移。

在Ruby目前的GC实现方式速度慢这一点上,New Relic的Chris Kelly演讲中表达了同样的观点,并强调,一个典型的Rails应用程序启动时会加载成千上万的对象,而GC执行的标记阶段需要对这些对象进行一遍又一遍地分析。不过,Chris也与大家分享了New Relic的Ruby GC基本问题测试结果,在Ruby 1.8和1.9之间,执行垃圾收集的时间减少了48%。

据Chris说,这表明MRI团队正在进行重大改进以升级Ruby在这方面的实现方式,尤其是宣布迁到分代式垃圾收集(据Matz说,此举有望将标记阶段耗时减少一半)。

在有些演讲中还有一些批评是关于缺少Ruby MRI垃圾收集实现方式方面的英文文档,而Chris在其演示文稿中列出了一些推荐内容,如“罕见的GC探讨”。

Matz还宣布了Ruby 2.1的其它一些功能增强,包括字符前缀(“i”表示complex数字、“r”表示rational数字、“f”代表frozen字符串)、refinements(全功能)和更快(大约15%)的RDoc文档生成速度。

查看英文原文:Ruby 2.1 Garbage Collection to Address Criticism on Large Scale Deployments

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT