GraalVM 21.2がリリースされ、ネイティブコンパイル時間が短縮された。そして、JDKフライトレコーダーとの統合が改善され、RubyやJavaScriptなどのJava言語以外に対するサポートが改善された。
このリリースでは、アプリケーションの機能間の重複をテストするロールがシンプルになった。これは、HotSpotモード(TCK準拠のランタイム)とネイティブイメージのコンパイル(プラットフォームネイティブバイナリ)で動作していることが条件となる。ネイティブコンパイルの利点は、起動時間とメモリが少なくなることと、iOSやAndroidなどのさまざまなプラットフォームで実行できることである。ネイティブテストはGradleとMavenのプラグインの一部としてサポートされる。このプラグインでは、アプリケーションに対して追加でテストを実行して、ネイティブイメージの機能がHotSpotモードの期待に一致することを検証する。このテストプラグインは、Quarkusなどのツールと同様の機能を提供する。Quarkusは、ネイティブイメージの作成時にGraalVMとMandrel(RedHatのGraalVM)のテストを活用している。Quarkusアプリケーションをネイティブコンパイルするときに、開発者は追加で@NativeImageTestアノテーションを使って、ネイティブコンパイルの前後に実行するように既存の単体テストクラスを拡張できる。重複テストは、実行中のアプリケーションがわずかに異なるために発生する。ネイティブコンパイルの前に失敗すると、誤ったアプリケーションをコンパイルするという無駄な時間をなくすことができ、後のテスト失敗では、ネイティブバージョンの機能がHotSpotバージョンと異なることが表示される。
ネイティブアプリケーションの開発者は、パフォーマンスイベントを監視できるようになった。これらのイベントは、HotSpot JDKのイベントに期待するものと同様に、Javaで記述されたイベントを使って、OpenJDKフライトレコーダーを介して通知される。カスタムイベントは、JDK Mission Control(JFRのビューアコンパニオン)などのツールあるいは、New Relic Oneなどの主要なダッシュボードツールに表示できる。
GraalVMが同時に多くの言語をサポートする共通のランタイムとJITを提供するため、基盤となるポリグロット言語の機能が改善された。GraalVMは、Truffle言語フレームワークを通じて、Python、Ruby、R、Cuda、および他の多くのアプリケーションのコンパイルおよび実行をサポートする。
GraalVMネイティブコンパイルの機能は、開発者とオペレーターがさまざまなタイプのハードウェアを最大限に活用できるようにするさまざまなJVMの組み合わせで使用できる。
- Standard HotSpot JVM(最も一般的)では、最新のシステム(x68/x86_64)、クラウド、および多くの組み込み(さまざまなARMチップ)で実行する上で最適なピークパフォーマンスを備えたジャストインタイムコンパイルが提供される。
- GraalVM/Mandrelでは、HotSpotモードと、モバイルデバイス(iOSおよびAndroid)で実行するネイティブコンパイルが提供される。そして、より小さなARM組み込みデバイス上での事前コンパイルを目的としたジャストインタイムコンパイルが優先される。
- TornadoVMでは、CPUではなくGPUでの実行を対象とした同様の機能が提供される。TornadoVMは、GraalVMと連携して、類似の機能を相互に有しており、どちらもネイティブコンパイルを実行する。
開発者は、新機能に関心のある場合、最新のGraalVM Community Edition、あるいは将来バージョンのRedHat Mandrelをダウンロードできる。