GraalVM とは
高性能なポリグロット VM です。
「GraalVM とは」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
GraalVMとは
GraalVMは、Graalという最新のJITコンパイラを基盤とする高性能なJDKディストリビューションです。多くのワークロードで通常のJavaをより高速に実行でき、さらにポリグロット実行と事前ネイティブコンパイルという2つの大きな機能を備えています。
そのまま使えるJDK
GraalVMは完全なJDKです。既存のjavac、java、バイトコードはすべて変更せずに動作します。違いは内部のコンパイラと、native-imageのような追加ツールが含まれている点です。
public class Main {
public static void main(String[] args) {
System.out.println("Runs the same on GraalVM as on any JDK");
System.out.println("Java: " + System.getProperty("java.version"));
}
}Graalコンパイラ
Graal JIT自体はJavaで書かれています。高度なインライン化、部分エスケープ解析、投機的最適化などの積極的な最適化を行い、抽象化が多く大量にメモリを割り当てるコードでは、従来のC2コンパイラを上回ることもよくあります。
Truffleによるポリグロット実行
GraalVMにはTruffleフレームワークが含まれており、複数の言語を同じVM上で実行し、相互に呼び出すこともできます。JavaScript、Python、Ruby、R、WebAssembly向けの実装があります。言語の境界を越えた値の受け渡しも、低いオーバーヘッドで行えます。
ポリグロットの例(概念)
ポリグロットAPIでは、Contextを作成して別の言語のコードを評価し、その結果をJavaに読み戻します。クラスはorg.graalvm.polyglotにあります。
// Requires GraalVM polyglot runtime
import org.graalvm.polyglot.*;
public class Main {
public static void main(String[] args) {
try (Context ctx = Context.create()) {
Value sum = ctx.eval("js", "40 + 2");
System.out.println(sum.asInt());
}
}
}ネイティブイメージ
native-imageツールは、Javaを事前にコンパイルして、単独で動作するネイティブ実行ファイルを生成します。実行時にJVMは不要で、クラスのロードやJITのウォームアップもないため、プログラムは数ミリ秒で起動します。
エディション
GraalVMには、無償のCommunity Editionと、追加の最適化機能を備えたOracle GraalVMディストリビューションがあります。どちらにもnative-imageが含まれており、学習用途や多くの本番用途ではコミュニティ版で十分です。
クラウドで重要な理由
高速な起動と少ないメモリ使用量により、ネイティブイメージはサーバーレス関数、CLI、ゼロまでスケールするコンテナに適しています。ネイティブJavaサービスは同等のGoバイナリと同じくらい速く起動でき、長年のJVMの弱点を解消します。
JITとAOTの比較
2つの実行モデルが共存しています。
- JIT(Graalコンパイラ)は、実行時に実際のプロファイル情報を使って最適化します。長時間稼働するサーバーでのピークスループットに適しています。
- AOT(native-image)は、実行前にコンパイルします。起動時間とメモリ使用量に適しています。
フレームワークのサポート
Spring Boot、Quarkus、Micronautなどの最新フレームワークは、native-imageを正式にサポートしています。ビルド時に設定を事前計算するため、アプリケーションをネイティブバイナリへスムーズにコンパイルできます。
GraalVMを選ぶ理由
抽象化の多いコードでより高いJITスループットが必要な場合、ポリグロット連携が必要な場合、または高速起動・低メモリのデプロイ用にネイティブ実行ファイルが必要な場合は、GraalVMを採用してください。標準JDKを包含する拡張版なので、導入リスクは低いです。
クイックチェック
GraalVMについての理解度を確認してください。
振り返り
GraalVMについて学びました。
- 高性能なGraal JITコンパイラを基盤とする完全なJDKです。
- Truffleによってポリグロット実行と言語間の呼び出しが可能になります。
- native-imageはJavaを事前にコンパイルしてネイティブ実行ファイルを生成します。
- JITは長時間稼働時のスループットを重視し、AOTは起動時間とメモリ使用量を重視します。
- Spring Boot、Quarkus、Micronautなどのフレームワークはネイティブビルドをサポートしています。
よくある質問
「GraalVM とは」レッスンは無料ですか?
はい。「GraalVM とは」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「GraalVM とは」で何を学びますか?
高性能なポリグロット VM です。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「GraalVM とは」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- GraalVM とは
- ネイティブイメージのビルド
- リフレクションと設定
- ネイティブイメージのトレードオフ