TL;DR

速く、小さく、軽いアプリケーションを作るための JDK。Java のアプリケーションを、事前にネイティブの実行ファイルへコンパイルできる。

なぜ必要か

ネイティブ実行ファイルはすぐに起動し、最高性能に達するまでのウォームアップがいらない。JVM で動かす場合に比べて、メモリと CPU の使用量もわずかで済む。

仕組み

Native Image は、アプリケーションをAOT コンパイルしてネイティブ実行ファイルにする。実行ファイルにはアプリケーションが使うクラス、メソッド、フィールドだけが含まれるので、小さく、攻撃対象になる部分も減る。静的リンクした実行ファイルは、空のコンテナイメージ(scratch)でも動く。

GraalVM の JDK には、最適化を行う Graal JIT コンパイラも入っている。また、Java のアプリケーションに Python(GraalPy)、JavaScript(GraalJS)、WebAssembly(GraalWasm)などを組み込める。

例

Spring Boot、Micronaut、Helidon、Quarkus といったフレームワークが GraalVM に対応している。

出典