写点什么

Ruby 性能近况:GC 调优、Maglev 和 MacRuby

  • 2009-04-18
  • 本文字数:830 字

    阅读完需:约 3 分钟

Ruby 1.8 中的垃圾回收器在去年受到了广泛的关注。Ruby 企业版(REE)的开发者们对 GC 进行了修改,实现了进程间的内存共享(详见 InfoQ 对创建者的采访)。REE 已经成为部署和运行 Rails 应用的普遍方式,包括 37Signals 在内的很多实践者都在使用它。最近, REE 中的 GC 有所改进,修正了一些 bug ,解决突发的冻结问题。

标准 Ruby1.8.x 的用户很快也可以受益于 MBAPI 补丁,这一补丁修正了许多 GC 问题及其相关的内存泄露问题,目前 MBAPI 由 EngineYard 提供赞助。

Evan Weaver 提供了 GC 调优小贴士,并推荐了一些可以监控 GC 的补丁。调优的结果如下:

目前每 13 个请求 GC 就会运行一次,代价有些高,每个请求需要耗费 0.009 秒。这意味着可以快上个 34% 左右。GC 调用频次与 RUBY_GC_MALLOC_LIMIT 的设置直接相关,但是如果我们将这个值设得再高一些,内存使用量就像吹气球那样爆掉了。

提高性能的另一个方法是寻求其他的 Ruby 实现,比如得益于现代 JVM 中成熟 GC 的 JRuby。其他的 Ruby 实现也将性能的提升作为主要的目标。Rubinius 正在稳步发展,而 MacRuby最近在它的实验分支上也有新的进展,性能上有所提升。实验分支上的工作正在进行中

  • 这个编译器现在能(据我所知)通过所有的语言规格,所以我猜它现在算是基本完成了。[…]
  • 由于以上种种,IRB 现在运行得不错!

更多改进

  • 引入了尾部调用消除。这一优化将递归调用转换成本地回路,这样可以防止栈溢出。[…]
  • 为了更快解释#eval 表达式,研究了 LLVM IR 解释器。研究结果已经提交,在简单表达式上工作得非常不错。不过缺省情况下不会激活这一功能,这是受调用 VM 基元的限制所致。我们将不得不稍微修改一下 LLVM 解释器,让它可以完全使用。这将在不远的将来实现。

最后,GemStone 的 Ruby 实现 MagLev 正在进行内部的 Alpha 版测试,Beta 版将于 Q2 推出。现在,兼容性(RubySpec)和基准测试结果在MagLev 的网站上已经公布。 Twitter 上也同步更新项目进展。

查看英文原文: Ruby Performance Roundup: GC Tuning, MagLev, MacRuby

2009-04-18 05:241877
用户头像

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

关注

评论

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

Redis是如何保证数据一致性的

芥末拌个饭吧

后端 redis 底层原理 10月月更

Java中的接口详解

共饮一杯无

Java 接口 10月月更

部署 SAP UI5 应用到 SAP BTP 时遇到的 error retrieving MTA 错误消息

汪子熙

云原生 Cloud 云平台 SAP 10月月更

go-zero docker-compose 搭建课件服务(五):完善user服务

六月的

Docker-compose go-zero

CEF | CEF浏览器客户端功能扩展:实现前进、后退、刷新、调用控制台、设置cookie、网页自适应窗体大小

YOLO.

qt 10月月更 C++

Linux下驱动开发_块设备驱动开发(内存模拟存储)

DS小龙哥

10月月更

一种基于柔性事务的分布式事务解决方案设计探究

京东科技开发者

分布式事务 事务 分布式架构 事务回滚 分布式处理

Linux下RTC驱动开发(硬件采用DS1302)

DS小龙哥

10月月更

【LeetCode】水果成篮Java题解

Albert

算法 LeetCode 10月月更

go-zero docker-compose搭建课件服务(四):生成Dockerfile

六月的

Docker-compose go-zero

OKR之剑·理念篇03:OKR理念认同

vivo互联网技术

团队管理 OKR 目标管理

react源码中的协调与调度

flyzz177

React

go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务

六月的

Docker-compose go-zero

go-zero docker-compose 搭建课件服务(三):编写courseware api服务

六月的

Docker-compose go-zero

go channel原理及使用场景

六月的

Go channel

掌握这个方法,让工作经验配得上工作时间!

博文视点Broadview

react源码中的fiber架构

flyzz177

React

Lerna最佳实践(内含大量代码)

鲸品堂

代码 lerna

react源码分析:组件的创建和更新

flyzz177

React

谈谈spark性能调优的方法

芥末拌个饭吧

spark 后端 10月月更

数据驱动型企业如何借助「新一代智能协作」提升研发效能?

LigaAI

人工智能 数据驱动 亚马逊云科技 企业号十月PK榜

go-zero docker-compose 搭建课件服务(七):prometheus+grafana服务监控

六月的

Docker-compose go-zero

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

DS小龙哥

10月月更

etcd实现分布式锁

六月的

分布式锁 etcd

go-zero docker-compose 搭建课件服务(六):完善jwt鉴权和返回结构

六月的

Docker-compose go-zero

无法吃午餐的学生数量

掘金安东尼

算法 10月月更

你知道Redis为什么要设计成单线程吗

芥末拌个饭吧

后端 redis 底层原理 10月月更

go-zero docker-compose 搭建课件服务(一):编写服务api和proto

六月的

Docker-compose go-zero

CEF | CEF浏览器客户端功能扩展:实现下载列表功能

YOLO.

qt 10月月更 C++

Linux下IIC驱动编写,介绍IIC子系统框架的使用

DS小龙哥

10月月更

实现etcd服务注册与发现

六月的

Docker-compose go-zero

Ruby性能近况:GC调优、Maglev和MacRuby_Ruby_Werner Schuster_InfoQ精选文章