硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

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

关注

评论

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

MUI框架的上拉加载的深入探索和实战运用

恒山其若陋兮

mui 11月月更

冷冷清清的双十一,电商促销节为何被消费者逐渐抛弃

石头IT视角

前端一面经典react面试题(边面边更)

beifeng1996

React

2022下半年《软考-系统架构设计师》备考经验分享

劼哥stone

软考 系统架构师

React源码分析5-commit

goClient1992

React

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

2022-11-17:组合两个表。请写出sql语句,执行结果是{“headers“: [“first_name“, “last_name“, “city“, “state“], “values“: [

福大大架构师每日一题

数据库 福大大

应用链如何成为 Web3 的“潜力链”

One Block Community

区块链 开发者 区块链应用 云存储 web3

【下】提高组件库Level必做好这六件事

小鑫同学

前端 组件库 11月月更

[力扣] 剑指 Offer 第三天 - 左旋转字符串

陈明勇

Go 数据结构与算法 力扣 11月月更

Python进阶(五十)浅析Flask运行原理

No Silver Bullet

Python flask 11月月更

图解漏桶(LeakyBucket)限流器的实现原理

Go学堂

golang 程序员 个人成长 限流 漏桶

react面试题详解

beifeng1996

React

对于Ajax在MUI框架中的用运以及单 webview 模式中的下拉刷新功能探究

恒山其若陋兮

mui 11月月更

React源码分析6-hooks源码

goClient1992

React

vue组件通信6种方式总结(常问知识点)

bb_xiaxia1998

Vue

Python进阶(四十九)初识Flask Blueprint

No Silver Bullet

Python flask 11月月更 Blueprint

【上】提高组件库Level必做好这六件事

小鑫同学

前端 组件库 11月月更

「Go实战」一文带你搞懂从单队列到优先级队列的实现

Go学堂

golang 开源 程序员 优先级队列 11月月更

promise执行顺序面试题令我头秃,你能作对几道

loveX001

JavaScript

React源码分析7-state计算流程和优先级

goClient1992

React

uni-app 性能优化实战之逻辑层条件编译的生产环境

恒山其若陋兮

11月月更 uni

Postman工具介绍

阿泽🧸

Postman 11月月更

React-hooks面试考察知识点汇总

beifeng1996

React

GitHub上新被爆赞!高并发JUC源码分析笔记,竟深受程序员追捧

钟奕礼

Java java程序员 java编程 Java面试题

Flowable 外置的 HTML 表单怎么玩?

江南一点雨

Java spring flowable JavaEE

docker安装WordPress(一)

蜗牛也是牛

Helm部署的服务如何修改配置

程序员欣宸

Kubernetes Helm 11月月更

Python进阶(五十二)Flask使用pymysql连接MySQL数据库

No Silver Bullet

Python MySQL pymysql 11月月更

【愚公系列】2022年11月 微信小程序-app.json配置属性之其他属性

愚公搬代码

11月月更

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