実装の詳細

Java on Truffleは、Truffleで実装される他の言語と同様に、ネイティブ実行可能ファイルとしてもHotSpotでも動作します(現在はLinuxでのみ可能です)。最初のケースでは、Java on Truffleランタイムがネイティブ実行可能ファイルにコンパイルされると、Javaを実行するためにHotSpotは必要ありません。ただし、標準のコアJavaライブラリ(Java 8の場合のrt.jarライブラリまたはJava 11の場合のlib/modulesファイル、および関連するネイティブ・ライブラリ(libjavalibnioなど))が必要です。

Java on Truffleは、次のようなVMのすべてのコア・コンポーネントを実装する縮小されたJava VMです:

Java on Truffleは、GraalVMのすべてのJARおよびネイティブ・ライブラリを再利用します。すべてのネイティブ・ライブラリおよびメソッドは、Truffle Native Function Interface (JNI)を介してロード/アクセス/コールされます。JNIハンドルがJava on Truffleに実装され、たとえば、すべてのTruffle NFIメソッドはプリミティブのみを受け取って戻します。いくつかのメソッドがパフォーマンスのためにかわりに使用され(Math.sqrtSystem.arraycopyなど)、コストの高いネイティブへの遷移を回避します。

一部のネイティブ・ライブラリに含まれる静的データが、複数のJava on Truffleコンテキストから使用された場合、またはJava on TruffleとHotSpotで実行されているJavaの両方から使用された場合にも、競合する可能性があります。Linuxでは、Java on TruffleはTruffle NFIの機能を使用して、分離されたネームスペース(dlmopen)にライブラリをロードすることを試みます。これは、glibcを使用するLinuxでのみ使用可能であり、多くの制限があります。HotSpotとの競合がないため、このモードはネイティブ実行可能ファイルで実行する場合には使用されません。

現在の制限事項