よくある質問

Truffleで実行されるJavaは、Truffleインタプリタとして実行されるJava言語を実装しますか。

完全ではありません。Truffleインタプリタとして実行されるJava仮想マシンを実装します。つまり、任意のJavaコンパイラ(javacなど)またはビルド・ツール(Maven、Gradleなど)を使用してJavaバイトコード(クラス、JARなど)にコンパイルされた後にのみ、Javaプログラムを実行できます。GraalVMファミリでは、WebAssemblyまたはLLVMインタプリタに似ています。どちらもCプログラムを実行できますが、最初にCコンパイラでコンパイルされる必要があります。

Truffleで実行されるJavaはHotSpotでも実行されますか。

Truffleフレームワークで実装される他の言語と同様に、ネイティブ実行可能ファイルとしてもHotSpotでも実行されます。HotSpotでの実行は、現在はLinuxでのみ可能です。この機能はmacOSおよびWindowsプラットフォームにも拡張される予定です。

Java on Truffleの実行にはHotSpotが必要ですか。

いいえ、ネイティブ実行可能ファイルとして正常に機能します。Java on Truffleには、標準のコアJavaライブラリ(Java 8の場合のrt.jarライブラリまたはJava 11およびJava 17の場合のlib/modulesファイル、および関連するネイティブ・ライブラリ(libjavalibnioなど))が必要です。

GraalVMでJavaを実行することで、すでに最高レベルの最適化が実現されますが、Java on Truffleにはどのような利点がありますか。

Java on Truffleにはどのようなライセンスがありますか。

Java on Truffleは、Java仮想マシンの実装です。これはオープン・ソースとなり、GNU General Public Licenseバージョン2 (GPLv2)に基づき、フリー・ソフトウェアとして提供されます。

Java on Truffleを本番で実行できますか。

はい、できます。Java on Truffleはまだプロトタイプですが、Java Compatibility Kit (JCKまたはTCK for Java SE) 8、11および17のランタイムにすでに合格しています。大幅な改良が加えられる可能性があります。

Java on Truffleを実行するパフォーマンスはどの程度期待できますか。

現在、パフォーマンスはHotSpotよりも2倍から3倍遅くなっています。GraalVMで提供される速度には確かにまだ及びませんが、完全に機能するJava on Truffleランタイムの作成が完了したため、開発チームは、現在、GraalVM JITと同等のパフォーマンスを実現することに重点を置いています。

Truffleで実行されるJavaをアプリケーションに埋め込むことはできますか。

はい、GraalVMのポリグロットAPIを使用して、ホストJava VMとは別のコンテキストでJavaバイトコードを実行できます。Java 8のコンテキストをJava 11またはJava 17アプリケーションに埋め込むこともできます。

IDEからアプリケーションを実行しようとすると、「Unrecognized option: -javaagent:…/idea_rt.jar…」が表示されるのはなぜですか。

Java on TruffleはJavaエージェントのアタッチをまだサポートしていません。当面は、-XX:+IgnoreUnrecognizedVMOptionsもVMオプションに追加してください。