写点什么

1.8.x 的新修复解决了内存泄漏问题并改进了性能

  • 2009-01-08
  • 本文字数:826 字

    阅读完需:约 3 分钟

就性能而言,目前 Ruby 1.9.1 和 JRuby 领导着 Ruby 的实现。然而由于种种原因,转到这两个实现中的任何一个都不是那么容易的事情,因为 Ruby 1.9.x 在有些地方与 1.8.7 不兼容,同时 JRuby 仍旧缺乏一些使用本地扩展的 Ruby 库。由于这个原因,MRI 1.8.x 还会继续存在一段时间,那么我们可能对其性能的改进产生兴趣。

目前 Brent Roman 在一定程度上改进了 Ruby 1.8.x MRI 的性能。他正不断尝试着修复 Ruby 中的内存泄漏问题

基本的技术就是对 Kurt Stephens 所建议的一个问题的精化。它不仅消除了这行代码的泄漏问题: loop {@x=callcc{|c|c}} 还消除了我们多线程机器人技术应用中的泄漏问题。过去我们所使用的 Ruby 进程在运行一天后常常达到 20+MB,而现在已经降到了 10MB 以下。

正如其所示,泄漏是由 GCC 的优化所导致的:它与 Ruby 的旧式 GC 的交互很差劲

垃圾收集器的内存泄漏问题并不是它本身的错误。问题在于“C”机器栈(machine stack)中充满了对象引用。其主要原因是由于 gcc 编译器创建了过多大的 stack frame 而又没有对其初始化。用在 Ruby 解释器的核心递归表达式程序中的某些“C”构造会生成特别大而又稀疏的 stack frame。函数 rb_eval() 就是最差劲的一个,它会为每次调用都创建 KB 大小的 stack frame,而其又会调用自身几百次。这导致栈的容量急剧膨胀,经常充满了不再使用而又无法移除的对象引用。

Brent提供了一些修复(针对Ruby 1.8.7-patlevel72),目的在于解决这些问题。

当运行在真实世界的Rails 应用上时,测试报告表明该修复对速度的提升效果很明显。同时也报告了一些问题,让我们对其拭目以待吧。

这些修复是开源(Ruby)社区对MRI 改进的又一个证明。 Mod_rails (或 REE) 已经是一个佐证了,它使得 MRI 的垃圾收集器更加友好(参见相关新闻以了解更多)。

MRI 的性能在很大程度上取决于它的编译方式

今年你还打算继续使用Ruby 1.8.x 么?如果是的话,理由呢?

查看英文原文: New Patches for 1.8.x Fix Memory Leaks And Improve Performance

2009-01-08 12:24671
用户头像

发布了 88 篇内容, 共 268.6 次阅读, 收获喜欢 8 次。

关注

评论

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

中国首批区块链订单融资缘何落地雄安?

CECBC

在线文本并集计算工具

入门小站

工具

架构营模块五作业

GTiger

使用ES6编写一个超简单的搜索算法

吴脑的键客

JavaScript 大前端

面试官:final、finally、finalize 有什么区别?

王磊

java面试

Rust 元宇宙 7—— 异步和消息

Miracle

rust 异步 元宇宙

如何用JavaScript实现2+2=5?

汪子熙

JavaScript 大前端 语音识别 语音合成 11月日更

29 K8S之ReplicaSet控制器

穿过生命散发芬芳

k8s 11月日更

面试官:int和Integer有什么区别?为什么要有包装类?

王磊

Spring AOP内功修炼

4ye

Java spring 程序员 后端 签约计划第二季

AOP 插件就这?上手不用两分钟!!

4ye

Java spring 程序员 后端 签约计划第二季

阿里巴巴服务网格技术三位一体战略背后的思考与实践

阿里巴巴云原生

阿里云 云原生 服务网格 三位一体

花了2个钟才搞懂这AOP为啥没生效,水友却睡着了……

4ye

Java spring 程序员 后端 签约计划第二季

面试官:说一下final关键字和final的4种用法?

王磊

元宇宙是人类文明不可避免的一次内卷

CECBC

架构训练营 - 模块六

Geek_9de3de

架构实战营

超强实时跟踪系统首次开源!支持跨镜头、多类别、小目标跟踪!

百度大脑

人工智能 人工智能摄像头

【死磕Java并发】-----J.U.C之深入分析CAS

chenssy

11月日更 死磕 Java 死磕 Java 并发

[Pulsar] 消息的消费

Zike Yang

Apache Pulsar 11月日更

使用redis生成唯一编号

喵叔

11月日更

网络监控原理

喀拉峻

网络安全 安全 网络

企业决策智能项目的五种失败姿势

脑极体

12.04 Serverless Meetup 深圳站 | Call 你来参加

阿里巴巴云原生

阿里云 Serverless 云原生 活动

你需要用战略耐心实现职业目标

石云升

读书笔记 11月日更

微博系统中”微博评论“的高性能高可用计算架构设计

Beyond Ryan

Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)

不脱发的程序猿

Python PyQt GUI设计 QClipboard 剪贴板

百度ERNIE新突破!登顶中文医疗信息处理权威榜单CBLUE冠军

百度大脑

人工智能

激发数字新活力 打造发展新优势

CECBC

DDD领域驱动设计落地实践系列:战略设计和战术设计

慕枫技术笔记

Java 后端 签约计划第二季

架构训练营 - 模块五

Geek_9de3de

架构实战营

OpenELB 进入 CNCF Sandbox,让私有化环境对外暴露服务更简单

青云技术社区

云计算 云原生

1.8.x的新修复解决了内存泄漏问题并改进了性能_Ruby_Werner Schuster_InfoQ精选文章