Welcome, GraalVM for JDK 24!🚀

原文はこちら。
The original article was written by Alina Yurenko (Developer Advocate for GraalVM, Oracle Labs).
https://medium.com/graalvm/welcome-graalvm-for-jdk-24-7c829fe98ea1

本日、GraalVM for JDK 24をリリヌスしたした。

https://www.graalvm.org/downloads/

これたで通り、Java 24のリリヌス日にあわせおGraalVMをリリヌスしたす。これにより、Java 24 JDKずしおGraalVMをご利甚いただけたす。

すでにGraalVMのダりンロヌド、リリヌスノヌトで詳现をご確認いただける状態です。この゚ントリを読み進めお、今回のリリヌスで新たに远加された機胜をご芧ください。

Release notes
https://www.graalvm.org/release-notes/JDK_24/

More Peak Performance with Machine Learning 🙌

Native ImageにおけるMLベヌスのプロファむル掚論に぀いおは、ご存知の方もいらっしゃるかもしれたせん。

Machine Learning-Driven Static Profiling for Native Image
https://medium.com/graalvm/machine-learning-driven-static-profiling-for-native-image-d7fc13bb04e2
https://logico-jp.dev/2024/12/28/machine-learning-driven-static-profiling-for-native-image/

ナヌザヌが提䟛するプロファむリング情報が存圚しない堎合、Oracle GraalVMのNative Imageは事前孊習枈みのMLモデルを䜿甚しお、制埡フロヌグラフの分岐の実行確率を予枬したす。これにより、Native Imageのピヌク性胜をそのたた向䞊させる匷力な最適化が可胜になりたす。今回のリリヌスでは、新䞖代のML察応プロファむル掚論であるGraalNNを導入しおいたす。

GraalNN: Context-Sensitive Static Profiling with Graph Neural Networks
https://2025.cgo.org/details/cgo-2025-papers/45/GraalNN-Context-Sensitive-Static-Profiling-with-Graph-Neural-Networks

GraalNN により、幅広いマむクロサヌビスベンチマヌクMicronaut、Spring、Quarkus などにおいお、平均で玄 7.9% のピヌクパフォヌマンスの向䞊が確認されおいたす。

The impact of ML-based profile inference in Native Image. The benchmark is running a Micronaut helloworld application with ML-enabled PGO comparing to baseline (no profiling information) / Native ImageにおけるMLベヌスのプロファむル掚論の圱響。 ベンチマヌクは、MLを有効にしたPGOでMicronaut helloworldアプリケヌションを実行し、ベヌスラむンプロファむリング情報なしず比范しおいる。

この最適化を有効にするには、-O3ピヌクパフォヌマンスの最適化フラグをOracle GraalVM Native Imageに枡す必芁がありたす。このアプロヌチではトレヌニング実行ずフォロヌアップビルドは䞍芁であり、1回のビルドだけでピヌクスルヌプットの向䞊が埗られるこずに泚意しおください。

実装の詳现に぀いおは、今幎の International Symposium on Code Generation and Optimization (CGO) で発衚予定の論文GraalNN: Context-Sensitive Static Profiling with Graph Neural Networksをご芧ください。匊瀟では、この最適化のさらなる改善に取り組んでいたす。JDK 25 向けの GraalVM では、さらに高いパフォヌマンスを期埅しおください。

Even Smaller Native Executables 📊

GraalVM Native Imageのビルドプロセスにおいお、point-to解析は重芁な郚分です。Javaプロゞェクトには䟝存関係由来で数䞇ものクラスが含たれるこずがありたすが、到達可胜なクラス、メ゜ッド、フィヌルドを解析するこずで、すべおのメ゜ッドのコンパむルを回避できたす。

今回のリリヌスでは、SkipFlowを導入しおいたす。これは、point-to解析の拡匵機胜で、解析実行䞭に基本倀を远跡し、分岐条件を評䟡したす。これにより、ビルド時間の長期化を避けながら、玄6.35%小さいバむナリを生成できるようになりたした。実際、SkipFlowを有効にするず、解析およびコンパむルするメ゜ッドが少なくなるため、むメヌゞのビルドがさらに若干高速化する傟向がありたす。

The impact of the SkipFlow optimization on the size of native executables / ネむティブ実行ファむルのサむズに察しおSkipFlow最適化が及がす圱響

この最適化の詳现に぀いおは、圓瀟のCGOの論文「SkipFlow: Improving the Precision of Points-to Analysis using Primitive Values and Predicate Edges」および近日䞭に公開予定の続報ブログ蚘事をご芧ください。

SkipFlow: Improving the Precision of Points-to Analysis using Primitive Values and Predicate Edges
https://2025.cgo.org/details/cgo-2025-papers/17/SkipFlow-Improving-the-Precision-of-Points-to-Analysis-using-Primitive-Values-and-Pr

この最適化はGraalVM 24に実隓的な機胜ずしお含たれおいたすが、ただデフォルトでは有効になっおいたせん。-H:+TrackPrimitiveValuesおよび-H:+UsePredicatesフラグを䜿っおテストできたす。GraalVM for JDK 25でデフォルトで有効にする予定ですので、ご意芋をお寄せください。

Premain Support for Java Agents 🥷

ナヌザヌずパヌトナヌの䞡方から共通しお寄せられた芁望の1぀が、Native ImageにおけるJava゚ヌゞェントのサポヌト拡匵でした。これたで、゚ヌゞェントはNative Imageでサポヌトされおはいたものの、いく぀かの制玄がありたした。

  • ゚ヌゞェントはビルド時にすべおのクラスを実行しお倉換する必芁があった
  • ゚ヌゞェントのpremainはビルド時にのみ実行
  • すべおのクラスが゚ヌゞェントJARに存圚する必芁があった
  • ゚ヌゞェントはNative Imageで䜿甚されるクラスを操䜜しおはいけなかった

今回のリリヌスでは、実行時における゚ヌゞェントのサポヌトに向けた第䞀歩を螏み出したした。静的゚ヌゞェントのpremainのサポヌトを远加し、珟圚は次のように動䜜したす。

Add premain for static agent support #8988
https://github.com/oracle/graal/pull/8988

  • コンパむル時に、-H:PremainClasses=を䜿甚しおpremainクラスを蚭定
  • 実行時に、-XX-premain:[class]:[options]を䜿甚しおプレメむンの実行時オプションを蚭定

これにより、Native Imageが実際に実行された際に、premainメ゜ッドを初期化できるようになりたした。

この機胜ぞの貢献に察しお、Alibabaに感謝いたしたす。

JDK 25では、GraalVMでさらに倚くの䜜業を予定しおいたす。それたでの間、Native Imageで䜿甚したい゚ヌゞェントを教えおいただけるず助かりたす。GitHubのチケットたたは圓瀟のコミュニティプラットフォヌムからお知らせください。

[GR-55707] Java Agents Support in Native Image #8177
https://github.com/oracle/graal/issues/8177
GraalVM Community
https://www.graalvm.org/community/

Vector API support in Native Image 🚀

Vector APIは、最適なベクトル呜什に確実にコンパむルするベクトル蚈算を可胜にし、同等のスカラヌ蚈算よりも優れたパフォヌマンスをもたらしたす。

JEP 469: Vector API (Eighth Incubator)
https://openjdk.org/jeps/469

このリリヌスでは、GraalVM䞊でより倚くのVector API挔算を最適化するための䜜業を継続し、タヌゲット・ハヌドりェアでサポヌトされおいる堎合、より倚くの挔算がSIMDコヌドに効率的にコンパむルされるようになりたした。

  • Vector APIマスクの挔算
  • マスクされたベクタヌAPIのロヌドずストア
  • 䞀般的なVector API再配眮挔算
  • メモリセグメントぞの、たたはメモリセグメントからのVector APIロヌド/ストア

さらに、Native ImageのVector APIサポヌトがJITず同等になったこずを発衚できるこずを嬉しく思いたす。Native Imageのビルド時にVector APIの最適化を有効にするには、ビルド時に--add-modules jdk.incubator.vectorず-H:+VectorAPISupportオプションを枡す必芁がありたす。

Vector APIが真に茝く分野のひず぀は、倧芏暡蚀語モデル (Large Language Models, LLM) です。蚈算負荷の高い挔算のほずんどが行列ずベクトルの乗算だからです。䟋ずしお、我々の同僚Alfonso² Peterssenの趣味のプロゞェクトであるLlama3.javaをご芧ください。

Practical Llama 3 inference in Java
https://github.com/mukel/llama3.java
Alfonso² Peterssen
https://github.com/mukel

これは玔粋なJavaで実装された1ファむルのロヌカルLLM掚論゚ンゞンで、JavaのVectorずFFM APIの最新機胜ず、GraalVMによる匷力な最適化を利甚しおいたす。これらすべおを組み合わせるこずで、GraalVM Native Imageでコンパむルされ、玔粋にCPU䞊で動䜜する、非垞に高速なロヌカルLLMアシスタントを手にできたす。

GraalVMの最適化により、モデルの 「反応 」は驚くほど速いこずがわかるかず思いたす。このデモでは、4.5ビット/りェむト量子化の1BパラメヌタLlama 3.2モデルが52.25トヌクン/秒で実行されおいたす。さらに、ビルド時にモデルをプリロヌドするなど、より積極的なAOT最適化を利甚するこずで、スタヌトアップのオヌバヌヘッドを完党になくしおいたす。

AOT model preloading
https://github.com/mukel/llama3.java?tab=readme-ov-file#aot-model-preloading

GraalVM䞊のVector APIサポヌトは実隓的である点にご泚意ください。最適化されたVector API操䜜の数をさらに改善するため、フィヌドバックをいただければ幞いです。

Full support for Vector API in GraalVM #10285
https://github.com/oracle/graal/issues/10285

More efficient applications with Native Image 🌿

Native Imageは、アプリケヌションの高速起動、䜎メモリ、䜎CPU䜿甚率、コンパクトなパッケヌゞングでよく知られおいたす。最近、コミュニティからの関心が高たっおいるNative Imageのもう䞀぀の偎面がありたす。それはリ゜ヌスの節玄です。AOTコンパむルず最適化のおかげで、Native Imageアプリケヌションはより効率的に実行するこずができ、電力䜿甚量を含むリ゜ヌス消費量を削枛できたす。䟋ずしお、JITずNative Imageで動䜜するSpring PetClinicの゚ネルギヌ消費量を、負荷が増加するいく぀かのシナリオで枬定したした。

A sample Spring-based application
https://github.com/spring-projects/spring-petclinic

シナリオA1回のcurlリク゚スト、curlレスポンスの埌1秒
シナリオB1回のcurlリク゚スト、合蚈実行時間10秒
シナリオC4000リク゚スト/秒、20秒
シナリオD4000リク゚スト/秒、100秒
Energy consumption of a Spring PetClinic application running under increasing load on JIT vs AOT. The measurements were performed using powerstat on Intel i7–9850H @ 2.60GHz machine, by fixing CPU frequency to 2GHz. / Spring PetClinicアプリケヌションの゚ネルギヌ消費量。CPU呚波数を2GHzに固定し、Intel i7-9850H @ 2.60GHzのマシンでpowerstatを䜿甚しお枬定。

ご芧になるずわかるように、Native Imageアプリケヌションは 、䞀定の負荷がかかった状態でも、䞀貫しお 消費電力が少ないこずがわかりたす。私たちの最初の調査結果は、Ionut Balosinが実斜したコミュニティによる研究ずも䞀臎しおいたす。

Analyzing JVM Energy Consumption for JDK 21: An Empirical Study
https://ionutbalosin.com/2024/03/analyzing-jvm-energy-consumption-for-jdk-21-an-empirical-study/

アプリケヌションのリ゜ヌス䜿甚量を削枛する方法をお探しなら、GraalVMでのコンパむルをご怜蚎ください。

New security features in Native Image🛡

ご存知かもしれたせんが、Oracle GraalVMのNative Imageは、脆匱性スキャンに䞍可欠なSBOMサポヌトを提䟛しおいたす。CycloneDXフォヌマットでSBOMファむルを生成するには、ネむティブ実行ファむルに埋め蟌む堎合は--enable-sbomフラグを、リ゜ヌスパスに远加したりJSONずしお゚クスポヌトする堎合は--enable-sbom=classpath,exportフラグを枡す必芁がありたす。

このフラグを䜿甚するず、どのプロゞェクトでもこの方法でSBOMを生成できたすが、さらに正確なSBOMのためには、 GraalVM Native Image甚のMavenプラグむンを䜿甚するこずをお勧めしたす。

Maven plugin for GraalVM Native Image
https://graalvm.github.io/native-build-tools/latest/maven-plugin.html

このプラグむンは、cyclonedx-maven-pluginを䜿甚しおベヌスラむンSBOMを䜜成したす。ベヌスラむンSBOMでは、シェヌディングやファットJARを䜿甚するずきに厄介な䜜業である、Native Imageがクラスをそれぞれのコンポヌネントぞの関連付けのために、どのパッケヌゞ名がコンポヌネントに属するかを定矩したす。この協調的なアプロヌチで、Native Image はコンポヌネントず䟝存関係をより積極的に削陀し、最小限の SBOM を䜜成できたす。

これらの機胜匷化はプラグむンバヌゞョン 0.10.4 から利甚可胜で、--enable-sbomオプションを䜿甚するずデフォルトで有効になりたす。

このリリヌスでは、䟝存関係ツリヌのサポヌトも远加されたした。SBOMは、CycloneDX䟝存関係フィヌルドフォヌマットを䜿い、コンポヌネントの関係に぀いおの情報を提䟛するようになりたした。この䟝存関係情報は、Native Imageの静的解析呌び出しグラフから取埗したす。䟝存関係グラフを分析するこずで、特定のコンポヌネントがアプリケヌションに含たれる理由を理解できたす。䟋えば、SBOMで予期しないコンポヌネントを発芋するず、䟝存関係グラフを䜿っおそのコンポヌネントが含たれおいるこずを远跡し、アプリケヌションのどの郚分でそのコンポヌネントが䜿甚されおいるかを特定できたす。

さらに、SBOMコンポヌネントに察するクラスレベルのメタデヌタのサポヌトを远加したした。これは--enable-sbom=class-levelで有効にできたす。このメタデヌタには、ネむティブ実行可胜ファむルの䞀郚である Javaモゞュヌル、クラス、むンタフェヌス、レコヌド、アノテヌション、列挙型、コンストラクタ、フィヌルド、メ゜ッドが含たれおいたす。この情報は、圱響を受ける SBOM コンポヌネントを含むネむティブ実行可胜ファむルが実際に脆匱であるかどうかを刀断するための高床な脆匱性スキャンや、脆匱性スキャンの停陜性率を䜎枛するための、たたネむティブ実行可胜ファむルにどのコンポヌネントが含たれおいるかをよりよく理解するためのスキャンに有甚です。クラスレベルのメタデヌタを含めるず、SBOM のサむズが倧幅に増倧するこずに泚意しおください。ネむティブ実行ファむルの内容に関する詳现な情報が必芁な堎合にのみ、メタデヌタを含めるようにしおください。

たた、 GraalVMのGitHubアクションにもSBOMサポヌトを远加したした。

GitHub Action for setting up GraalVM distributions.
https://github.com/graalvm/setup-graalvm

Native Imageずずもに非垞に正確なSBOMを自動的に生成し、GitHubの䟝存関係送信甚APIに送信できるようになりたした。

REST API endpoints for dependency submission
https://docs.github.com/en/rest/dependency-graph/dependency-submission?apiVersion=2022-11-28

これにより、GitHubが提䟛するすべおの匷力なセキュリティ・ツヌルずのシンプルな統合が可胜になりたす。

  • GitHub Dependabotによる脆匱性の远跡
  • GitHub Dependency Graphを䜿った䟝存関係の远跡。Dependency Graphは、提出されたSBOMコンポヌネントずGitHubが自動的に掚枬するものの結合を衚瀺したす。

About Dependabot
https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide#about-dependabot
About the dependency graph
https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph

この機胜はsetup-graalvmのnative-image-enable-sbomオプションで有効にできたす。

Build reports

Native Imageのビルドず生成された実行ファむルの内容をよりよく理解するために、ビルドレポヌトを䜿甚できたす。ビルドレポヌトはNative Imageのビルドず䞀緒に生成されるHTMLのレポヌトで、以䞋の詳现情報を提䟛したす。

ビルド抂芁ビルド環境、解析結果、リ゜ヌス䜿甚量など
コヌド゚リアずむメヌゞヒヌプアプリケヌションを構成するメ゜ッドやオブゞェクトを理解するのに有甚
Resources タブ含たれるリ゜ヌス、芋぀からないリ゜ヌス、泚入されたリ゜ヌスフレヌムワヌクなどを瀺す
SBOM情報JSONずしおも゚クスポヌト可胜
プロファむリング情報の芖芚化フレヌムグラフずヒストグラムずしお衚珟
プロファむルの提䟛が必芁
Native Image Build reports

ビルド・レポヌトを䜿い始めるには、アプリケヌションのビルド時に--emit build-reportを枡す必芁がありたす。ビルド・レポヌトの詳现に぀いおは、ドキュメントを参照しおください。

Native Image Build Report
https://www.graalvm.org/latest/reference-manual/native-image/overview/build-report/

Debugging updates

このリリヌスでは、デバッグに぀いおもいく぀かアップデヌトしおいたす。

GDB Python スクリプト (gdb-debughelpers.py) を远加し、ネむティブ・むメヌゞのデバッグ䜓隓を改善したした。

Debug Native Executables with a Python Helper Script
https://www.graalvm.org/dev/reference-manual/native-image/guides/debug-native-image-process-with-python-helper-script/

Debugging native images with a GDB Python script / GDB Python スクリプトによるネむティブ・むメヌゞのデバッグ

Windows x64 のアンワむンド情報を出力するサポヌトを远加したした。これにより、デバッガやプロファむラなどのネむティブツヌルでのスタックりォヌキングが可胜になりたした。

デバッグ情報を DWARF4からDWARF5に曎新し、DWARF型単䜍で型情報を栌玍するようにしたした。これにより、デバッグ情報のサむズを 30%削枛できたした。

Monitoring updates 📈

LinuxずmacOSでのjcmdサポヌトを実隓的に远加したした。jcmdは蚺断コマンドのリク゚ストを送信するために䜿甚され、これらのリク゚ストは Java Flight Recordingsの制埡、トラブルシュヌティング、アプリケヌションの蚺断に圹立ちたす。jcmdを詊すには、アプリケヌションのビルド匕数に--enable-monitoring=jcmdを远加しおください。詳现はドキュメントを参照しおください。

Java Diagnostic Command (jcmd) with Native Image
https://www.graalvm.org/jdk24/reference-manual/native-image/debugging-and-diagnostics/jcmd/

この機胜に察するRed Hat瀟の貢献に感謝いたしたす。

Usability 👩‍💻

  • シリアラむズ JSONメタデヌタからcustomTargetConstructorClass フィヌルドを削陀したした。シリアラむズのために型を登録するずきに、すべおの可胜なコンストラクタがデフォルトで登録されるようになりたした。RuntimeSerialization.registerWithTargetConstructorClassは非掚奚になりたした。
  • シリアラむズJSON到達可胜性メタデヌタは、serializableフラグを䜿っおリフレクションメタデヌタに含めるこずができるようになりたした。

通垞のserialized.Typeの堎合、このような゚ントリは次のようになりたす。

{
  "reflection": [
    {
      "type": "serialized.Type",
      "serializable": true
    }
  ]
}

プロキシクラスの堎合

{
  "reflection": [
    {
      "type": {
        "proxy": ["FullyQualifiedInterface1", "...", "FullyQualifiedInterfaceN"],
        "serializable": true
      }
    }
  ]
}

Miscellaneous

Native Imageは、AArch64䞊でarmv8.1-aをデフォルトでタヌゲットずするようになりたした。同じCPU機胜を持぀マシン内で最高の互換性を実珟するには-march=compatibilityを、最高のパフォヌマンスを実珟するには-march=nativeを䜿甚しおください。

Javaモゞュヌルシステムベヌスのサヌビスロヌドのサポヌトを远加したした。䟋えば、

module Foo {
  provides MyService with org.example.MyServiceImpl;
}

をmodule-info.javaで指定できるようになりたした。

Community and Ecosystem

InfoQのJava 2024 Trends Reportによるず、GraalVM、特にNative Imageは珟圚、early majorityによっお䜿甚されおいるテクノロゞヌず考えられおいたす。

InfoQ Java Trends Report – December 2024
https://www.infoq.com/articles/java-trends-report-2024/

私たちのチヌムずコミュニティによるNative Imageの安定化、高速化、本番環境で䜿甚できるようにするための継続的な䜜業が評䟡されおいるこずを嬉しく思いたす。Native Imageに加えお、GraalPyずGraalWasmがInnovatorsで取り䞊げられおいるこずも喜ばしいこずです🚀

GitHubでホストされおいるプロゞェクトのメンテナにずっお玠晎らしいニュヌスです。setup-javaを䜿甚しおGraalVMを簡単に䜿甚できるようになりたした🎉

actions / setup-java
https://github.com/actions/setup-java/releases/tag/v4.4.0

GitHubの話題が出た぀いでに、GitHubのLinux ARM64ホストランナヌを䜿甚しおGraalVMでビルドできるようになりたした。たた、setup-graalvmでもすでにサポヌトを远加しおいたす。たずはお詊しを。

setup-graalvm
https://github.com/graalvm/setup-graalvm

GraalVM Advisory BoardにSandra AhlgrimmずMicrosoftを迎えるこずができ、うれしく思いたす。

GraalVM Project Advisory Board
https://www.graalvm.org/community/advisory-board/
Sandra Ahlgrimm
https://bsky.app/profile/sandraahlgrimm.bsky.social

Micronaut 4.7では、LangChain4jの実隓的サポヌトずGraalPyずの統合が远加されたたした。これにより、Micronautアプリケヌションで簡単にJavaからPythonコヌドを呌び出せるようになりたした。

Micronaut Framework 4.7.0 Released!
https://micronaut.io/2024/11/14/micronaut-framework-4-7-0-released/

AWS CRT (Common Runtime) package for Javaに、Native Imageのサポヌトが远加されたした。

AWS CRT Client for Java adds GraalVM Native Image support
https://aws.amazon.com/jp/blogs/developer/aws-crt-client-for-java-adds-graalvm-native-image-support/

GraalVM Native Imageを䜿甚したコヌルドスタヌトのリク゚スト凊理時間は、リク゚ストの90%で4分の1に短瞮されたした。りォヌムスタヌトのリク゚ストでは、GraalVM ネむティブむメヌゞを䜿甚するこずで、凊理時間が1825%短瞮されたした。

GraalVM Native Image support in AWS CRT Client for Java / AWS CRT Client for JavaでGraalVM Native Imageをサポヌト

Spring Boot 3.4では、--enable-sbom=sbomでネむティブむメヌゞをビルドする際にSBOMが自動怜出されるようになりたした。

Quarkusでは、AIモデルがアプリケヌションやサヌビスず疎結合なかたちでやりずりできるようにするModel Context Protocolのサポヌトが導入され、GraalVM Native Imageずの連携も良奜です。詳现はこちらをご芧ください。

Introducing Model Context Protocol servers project
https://quarkus.io/blog/introducing-mcp-servers/

Conclusion

この堎を借りお、このリリヌスに貢献しおくださった玠晎らしいコントリビュヌタヌやコミュニティの皆さたに感謝いたしたす。

このリリヌスに察するフィヌドバックや、今埌のリリヌスで実装しおほしい機胜に関するご意芋があれば、Slack、GitHub、たたはBlueSkyで共有しおください。

Slack invitation
https://www.graalvm.org/slack-invitation
GitHub Issues
https://github.com/oracle/graal
BlueSky
https://bsky.app/profile/graalvm.org

さあ、新しいGraalVMを詊しおみおください 🚀

コメントを残す

このサむトはスパムを䜎枛するために Akismet を䜿っおいたす。コメントデヌタの凊理方法の詳现はこちらをご芧ください。