InfoQ

新闻

JRuby 1.1发布,主要性能提高

作者 Werner Schuster 译者 贾晓楠 发布于 2008年4月13日 下午9时30分

社区
Ruby,
Java
主题
编译器,
性能和可伸缩性,
JRuby,
动态语言,
运行时,
脚本
标签
JRuby,
开源项目发布
9个月前,JRuby 1.0发布了 ,在3个候选发行版也发布之后,JRuby 1.1终于面世了。InfoQ访问了Ruby的Charles NutterOla Bini,来谈一谈JRuby 1.1的变化的背后细节和项目未来的方向。

Charles列出了JRuby 1.1中的重大变化
最大的改进是:
  • 一个完整的编译器,用来把Ruby代码转换成Java字节码(bytecode)
  • 重写了IO子系统,使它更好地匹配Ruby的性能
  • 我们的新Regexp引擎支持Ruby字符串,并且性能大幅提升
  • 总体性能比1.0所有的发行版都要好许多倍
我们还做了成千上万的修补来兼容Ruby 1.8.6。JRuby是目前为止与Ruby兼容性最好的第三方实现了,而且很长时间内都会一直是。
他还表达了对JRuby 1.1性能的看法:
通用的Ruby代码几乎都应该运行地快得多,特别是在它使用了大量正则表达式的情况下。一般来说,如果一段Ruby代码在JRuby中运行得不如在Ruby 1.8.6中快的话,我们就认为这中间出现了问题,于是我们就查找问题报告,来解决所有遗留的瓶颈问题。
除了JIT(把Ruby代码编译为Java字节码的 Just In Time 编译器)以外,性能得以改进的另一个原因是 Joni,一个Oniguruma Regex引擎的Java移植 。Ola大概介绍了一下:
基 本上,这个正则表达式引擎完全移植于Oniguruma——这是Ruby 1.9将采用的Regex引擎。我们的移植是由Marcin Mielżyński完成的,似乎具有更优的性能,而且还修正了原Oniguruma中仍存在的一些错误。这个新的实现比其他所有的基于Java的 regex引擎表现得都要好,并且还与Ruby 1.8和Ruby 1.9具有极好的兼容性。我们重写了大部分的Regexp和字符串方法,来有效地使用新引擎。
Charles补充了一些细节:
由 于Ruby的字符串只是字节集合,因此JRuby实现也使用Java字节数组。正是由于这个原因,现有的Java正则表达式引擎对我们来说表现的都不好; 所有的regexp操作都要把byte[]转回char[]。但JRuby成员之一Marcin Mielzynski煞费苦心地移植了Oniguruma——这一个Ruby 1.9所使用的基于byte[]的编码无关的(encoding-agnostic)正则表达式引擎。多亏了他的“Joni”库,现在我们有了比以前更好 的regexp支持,并且基本上所有的regexp性能问题都解决了。这是一项伟大的工作,一个巨大的贡献。
随着1.1的开发周期结束,这意味着应该开始考虑将来的发行版了。Ruby世界的一个主题是支持Ruby 1.9的特性。Ola解释了现在的计划:
现 在Ruby 1.9还处于开发版,尚没有对我们造成很大影响。我觉得它会在两方面对我们有所帮助:第一,1.9的特性将更稳定,也就是说我们更容易把它们正确地加到 JRuby中。第二,由于我们正打算开始观察1.9的真实性能,我们就有了一个好的目标来对比。现在我们基本上在所有的标准评测中都超过了1.8。

我们已经开始把1.9的东西加入JRuby了,而且我们还会继续这么做下去。当然现在首先要保证正确性和修正错误。例如Oniguruma的移植让我们为字符串等增加编码支持变得更加容易。

我 们还没有讨论到2.0。从我个人来说,我觉得2.0会是个完全兼容1.9和1.8的版本。为了JRuby 1.2,我们会致力于Java集成和外部API。我们的Java集成特性现在工作的非常好,但其中仍有一些漏洞和低效率的东西,所以我们打算对那个子系统 做一次彻底的检查。这毫无疑问是个主要的工作,而且收获也会很棒。
与往常一样,性能一直是个重要的话题。Ola指出了一些事关性能提高的关键点:
你 差不多在所有的方面都能看到性能的提升。但是在那些我们能够静态地指出基于堆栈的本地变量足够安全,又没有使用eval,也没有什么时髦东西地方,性能才 提高得最多。在那些方法中,我们通常可以从编译器中获得巨大的性能提升,而且如果它们是你程序中的热点的话,这也会大幅改进一般的运行时。
Charles对未来的计划是:
在JRuby 1.1之后,我们最想看到的两个方面是对1.9的支持和更好的Java集成。这些工作可能会造就JRuby 1.2,或者大到直接进入JRuby 2.0。当然了,我们也会通过不断改进性能来保持领先……但是到目前为止,我们已经对它非常满意了。
我们正考虑在JRuby 1.1发布一段时间后开始致力于Ruby 1.9的特性。然而我们也希望在我们花了大量时间在1.9的特性上时,它能保持稳定。看起来1.9发展的很快,但我们可不想在明年去追赶1.9特性的变化。
Charles还说了他对未来改进的想法,不仅针对JRuby的性能,而是针对所有运行在JVM上面动态语言
我 想我们无论如何都要展示一下JVM的dynlang的惊人潜力。即使这意味着要为OpenJDK创造一个新的,可能还不太兼容的东西,那也值得。没有理由 会让这个工作不能正确地集成到Java中,但确实存在难以置信的VM等待被开发。我想既然人们已经意识到了他们进入了什么,今年对OpenJDK来说会是 重要的一年。而你可以见证JRuby的工作会利用人们提出的所有OpenJDK实验。
查看更多关于改进JVM上的动态语言支持的计划和项目,或者直接看一看关于此项研究的Da Vinci Machine网站来寻求更多细节。

敬请阅读InfoQ中所有关于JRuby的文章

原文链接:JRuby 1.1 released with major performance improvements

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。