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

相关赞助商

InfoQ中文站Ruby社区,面向Web和企业开发的Ruby,主要关注Ruby on Rails,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Ruby社区提供一流资讯。

没有回复

回复

独家内容

运用Ruby纤程进行异步I/O:NeverBlock和Revactor

Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

与杨巍一起探讨OpenSocial

InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。

使用ClickOnce细分发布版本

ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。