在第一个预览版(见InfoQ 的报道)发布五个月之后及第二个预览版发布不久, JRuby 1.7.0 发布了正式版。
JRuby 1.7 最显著的变化就是使用 Ruby1.9.3 作为默认运行模式,当然它仍然支持 1.8.7. 从以下发布说明上看,尽管 JRuby 1.7 修复了很多与 1.9 不兼容的问题,但仍未完全支持 Ruby 1.9 的 所有特性。
“虽然 JRuby 1.7 对 1.9 的某些特性还不支持,比如 Ripper,但已经可以稳定地在 1.9 模式中运行产品应用程序了。在可预见的未来,我们会每隔 2 到 3 周发布一个 1.7.x 补丁包,这些补丁将会解决用户向我们报告的问题以及那些尚未完成的 1.9 的库。”
JRuby 1.7 不再继续支持 Java 5,同时 Rubygems 和 Rake 的相应版本也更新到 1.8.24 和 0.9.2.2。
JRuby1.7 能使用 Java 7 的 invokedynamic 功能,但和第一个预览版不同,此功能现在默认为关闭状态。详细原因可见 JRuby wiki :
“OpenJDK7 的现有版本有时会发生错误或者无法优化代码。为了提供一致的 JRuby 体验,在 Java 7 中将默认关闭 invokedynamic 功能。
对于那些没有出现运行错误或者性能降低的应用,我们推荐开启 invokedynamic 功能以获得最大性能。可以通过强制传递以下参数“Xcompile.invokedynamic=true”给 JRuby(或者添加到 JRUBY_OPTS 里),或者在 Java 虚拟机层面设置 “jruby.compile.invokedynamic=true” 参数来开启 invokedynamic 功能。”
在 Java 8 builds 的 Java 虚拟机中 invokedynamic 功能默认是开启的。
您是否已经尝试过在 JRuby1.7 中开启 invokedynamic 功能? 您的应用的性能有了多少提升?
查看英文原文: http://www.infoq.com/news/2012/10/jruby-17
感谢李永伦对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论