最初のプレビューリリース (InfoQの記事を参照) から5ヶ月で、後で2つ目のプレビューリリースとなる、JRuby 1.7.0 の最終バージョンがリリースされた。
JRuby 1.7の最も際立つ変更は、Ruby 1.9.3がデフォルトのランタイムモードであるが、まだ1.8.7をサポートすることである。多くの1.9非互換性が修正されたが、 Ruby 1.9の全てが完全にはサポートしていない。リリースノートからの引用:
我々は、Ripperのように、未だ1.9でサポートしていない部分があることを知っています。しかし、我々は、人々が JRuby を1.9モードで使って本番アプリをホストできる安定した所にいます。現時点で、当面の間、2,3週間毎に1.7.xのポイントリリースを公開する計画です。これらのポイントリリースは、ユーザー経験した、あらゆる報告された問題に対処します。そして未だ開発が終わっていない幾つかの抜けている1.9ライブラリもリリースします。
Java 5のサポートは落とされた。 Rubygems と Rakeがそれぞれ 1.8.24 と 0.9.2.2にアップデートされた。
JRubyの1.7では、Java 7のinvokedynamicのを利用しているが、最初のプレビューリリースとは違って、それはデフォルトでオフになっている。JRuby wikiにその理由を説明している。
OpenJDK 7 の現在のリリースバージョンは、時々エラーになるし、コードを最適化するのに失敗する。一貫したJRuby経験を提供するために、Java7では invokedynamicの使用をデフォルトでオフにした。
エラーやパフォーマンスの低下に陥らないアプリケーションの場合は、invokedynamicは、最高のパフォーマンスのためにお勧めする。 それは、強制的にJRuby(またはJRUBY_OPTSで)に-Xcompile.invokedynamic=trueを渡すことによって、またはJVMレベルでjruby.compile.invokedynamic = trueプロパティを設定することにより有効にすることができます。
JVMのJava 8ビルドでは、invokedynamicはデフォルトで有効になっている。
あなたは、 invokedynamicを有効にして、 JRuby 1.7を試しましたか? あなたのアプリケーションでどのくらいパフォーマンスが改善しましたか?