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 实现方式存在根本缺陷,并建议,一旦 JRuby 和 Rubinius 实现了与 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
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论