よくある質問

Truffle上で動作するJavaは、Truffleインタープリタとして動作するJava言語を実装していますか? #

正確にはそうではありません。これは、Truffleインタープリタとして動作するJava仮想マシンを実装しています。つまり、お好みのJavaコンパイラ(例:`javac`)やビルドツール(Maven、Gradleなど)でJavaバイトコード(クラス、JARファイルなど)にコンパイルされた後でのみ、Javaプログラムを実行できます。GraalVMファミリーでは、これはWebAssemblyやLLVMインタープリタに似ています。どちらもCプログラムを実行できますが、最初にCコンパイラでコンパイルする必要があります。

Truffle上で動作するJavaは、HotSpot JVM上でも動作しますか? #

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

Espressoの実行にはHotSpot JVMが必要ですか? #

いいえ、必要ありません。ネイティブ実行ファイルとして正常に動作します。Espressoには、標準のJavaコアライブラリ(Java 8の場合は`rt.jar`ライブラリ、Java 11以降の場合は`lib/modules`ファイル、および関連するネイティブライブラリ:`libjava`、`libnio`など)が必要です。

GraalVM上でJavaを実行するとすでに最高レベルの最適化が得られますが、Espressoを使用するとどのような利点がありますか? #

  • Espressoは、Truffleフレームワークによって提供される広範なツールを継承しています。つまり、コードカバレッジとプロファイリングのために、外部ツールに依存する必要がなくなります。
  • もう1つの重要な点は、EspressoがホストJava VMとTruffle上で動作するJavaプログラムの分離を改善していることです。
  • さらに、Espressoはネイティブ実行ファイルのコンテキストで実行しながら、動的にロードされたバイトコードを許可できます!
  • 最後に、拡張されたホットスワップ機能の利点を享受でき、生産性を向上させることができます。

Espressoのライセンスは何ですか? #

EspressoはJava仮想マシンの実装です。オープンソースであり、GNU General Public License version two (GPLv2)に基づくフリーソフトウェアとして提供されています。

本番環境でEspressoを実行できますか? #

はい、Linux x64では可能です。他のプラットフォームのサポートはまだ実験段階です。

Espressoの実行でどのようなパフォーマンスが期待できますか? #

現在の性能は、HotSpot JVMより2〜3倍遅いです。GraalVMが提供する速度にはまだ匹敵しませんが、完全に動作するEspressoランタイムを作成したため、開発チームは現在、GraalVM JITと同等の性能にすることに注力しています。

Truffle上で動作するJavaをアプリケーションに埋め込むことはできますか? #

はい、GraalVMのPolyglot APIを使用して、ホストJava VMとは別のコンテキストでJavaバイトコードを実行できます。Java 8コンテキストをJava 11、17、または21アプリケーションに埋め込むことさえできます(オプション`--java.JavaHome=/path/to/jdk8`を使用)。

IDEからアプリを実行しようとすると、「認識されないオプション:-javaagent:…/idea_rt.jar…」と表示されるのはなぜですか? #

Espressoにエージェントをアタッチすることはできません。現時点では、VMオプションに`-XX:+IgnoreUnrecognizedVMOptions`を追加してください。

お問い合わせ