RedHatは新しいJavaディストリビューションMandrelを発表した。これはJavaアプリケーションをネイティブマシンのコードに直接コンパイルし、より少ないメモリでより高速な起動を実現する。
OracleのGraalVMをベースにしたMandrelは、細かい違いはあるものの、コミュニティがサポートする追加ビルドを提供する。RedHatのエンジニアリング担当シニアディレクター、Mark Little氏は、「Mandrelは、通常のOpenJDKと特別にパッケージ化されたGraalVMネイティブイメージのディストリビューションと表現するのが最も良いでしょう」と説明している。 RedHatがMandrelを導入した背景にある第一の推進力は、「超音速 亜原子 Java」とするQuarkusフレームワークのスピードと効率化を推進することだ。 Quarkusは、クラウドプロバイダーへのコンテナ化またはサーバーレス配布と同様に迅速なリロードによるローカル開発の両方を提供するフレームワークだ。2019年に初めて導入されて以来、より速く起動し、クラウドの運用コスト&リソースを削減するネイティブ実行ファイルを構築する能力をQuarkusは協調してきた。
GraalVMの責任者であるThomas Wuerthinger氏は、Mandrelのリリースに反応し「@graalvmcommunityに積極的に参加してくれた@maxandersen氏と同僚に感謝します!」と述べた。
Andres Dinn氏は、Quarkus Insightsビデオシリーズのエピソード7で、GraalVMとMandrelの役割を説明した。そのビデオは、just-in-timeコンパイルとahead-of-timeコンパイルの違いなどの質問を交えながら、使い方だけでなく、様々な技術的な詳細を解説した。Dinn氏は、それぞれのメリットとデメリット、どこに向いているのかを解説した。
MandrelのGitHubリポジトリはGraalVMのフォークを表しているが、まだバイナリのディストリビューションは提供していない。代わりに、ユーザーは提供された手順に従うことで、自分自身でJDKをコンパイルする。
パフォーマンスベンチマークでは、GraalVMは起動時間が50倍高速化され、メモリ使用量が5倍削減された。テストは、JavaのHotSpotモードに対する以前のバージョンのQuarkusフレームワークを使用して完了した。この改善はahead-of-timeコンパイル時間が追加されるが、QuarkusのネイティブLambdaやAzure Functionsのデプロイメントと一緒に使用できる。
その他のヒントやコツは、ネイティブにコンパイルされた形でいくつかのフレームワークをベンチマークしてきたJames Ward氏が提供している。Ward氏は、パフォーマンス向上のメリットだけでなく、リフレクションに依存するアプリケーションなどのいくつかの問題もカバーしている。「実行時にリフレクションが発生すると、AOTコンパイラが実行パスを把握するのが困難になるため、GraalVMネイティブイメージに問題が生じます。」 リフレクションを必要としないアプリケーションの場合、Quarkusのホームページは直接恩恵を受けれる。RAMは73MBと比較して12MBとなり(83%の減少)、最初の応答までの秒数は0.943に対して0.016秒だ(98%の減少)。
開発者は、独自のビルドでMandrelを使用することもでき、GraalVM CommunityやJDK 11+のディストリビューションを利用できる。興味のある開発者は、これらを使用してQuarkusハッカソンに参加できる。