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 に対応している。