よくある質問
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
ファイル、および関連するネイティブ・ライブラリ(libjava
、libnio
など))が必要です。
GraalVMでJavaを実行することで、すでに最高レベルの最適化が実現されますが、Java on Truffleにはどのような利点がありますか。
- Java on Truffleは、Truffleフレームワークによって提供される広範なツールを継承します。つまり、コード・カバレッジやプロファイリングなどのために外部ツールに依存する必要がなくなります。
- 別の重要な側面は、Java on TruffleではホストJava VMとTruffleで実行される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オプションに追加してください。