原文はこちら。
The original article was written by Alina Yurenko (Developer Advocate for GraalVM, Oracle Labs).
https://medium.com/graalvm/graalvm-in-2023-a-year-in-review-60f7f0635671
今年も終わろうとしていますが、GraalVMの周りではたくさんのエキサイティングなことが起こりました。このブログエントリでは、2023年のGraalVMプロジェクトとコミュニティからの最も興味深く重要なアップデートを共有したいと思います。
New Distribution and New Release Cadence
今年最大のニュースはOracle GraalVMです。6月、私たちは新しいGFTCライセンスの下でOracle GraalVMをリリースしました。
GFTC license
https://oracle.com/java/technologies/javase/jdk-faqs.html#GraalVM-licensing
このOracle GraalVMには、開発中および量産中の最も先進的なGraalVMの機能(プロファイル・ガイド付き最適化、ML対応プロファイル推論、G1 GC、追加のコンパイラ最適化など)がすべて含まれており、無料で利用できます。
それ以来、Oracle GraalVMは多くのプラットフォームで利用できるようになりました。Oracle Container Registryからコンテナイメージを入手したり、SDKMAN!経由でインストールしたり、GitHub Actionsで使用したり、Oracle GraalVMをSpringやその他のプロジェクトのPaketoビルドパックとして使用したりできます。
Oracle Container Registry
https://container-registry.oracle.com/ords/ocr/ba/graalvm
JDK Distributions – SDKMAN! the Software Development Kit Manager
https://sdkman.io/jdks
GitHub actions
https://github.com/marketplace/actions/github-action-for-graalvm
Oracle GraalVM Now Available as a Paketo Buildpack
https://medium.com/graalvm/oracle-graalvm-now-available-as-a-paketo-buildpack-7b6a7dbb939c
https://logico-jp.io/2023/12/13/oracle-graalvm-now-available-as-a-paketo-buildpack/
少し前にお知らせしたように、私たちはリリースサイクルも変更しました。一般提供前の初期から一緒にいる方は、活発に実験とGraalVMの開発を行っていたため、私たちが非常に頻繁に、ほぼ毎月リリース候補をリリースしていたことを覚えてらっしゃるかもしれません。
GraalVM Release Candidates
https://graalvm.org/release-notes/release-candidates/
2019年5月のGA以降、私たちは3ヶ月ごとのリリース・ケイデンスと1年ごとのLTSリリースに移行しました:これにより、私たちは新機能をリリースし、頻繁にフィードバックを得ることができるようになり、また安定性を好むユーザーのために安定したリリースを提供することができるようになりました。

もしGraalVMの進化や、どのように研究プロジェクトから製品に変えたかについて興味があるなら、Thomas Wuerthingerがこの素晴らしいStrange Loopのプレゼンテーションでまさにそれについて語っています。
現在、プロジェクトはさらに成熟し、またOpenJDKとより密接に連携しているため、私たちは6ヶ月ごとのリリース・ケイデンスに移行しました。さらに良いことに、OpenJDKと同じ日にリリースします。リリースといえば、最新のリリースであるGraalVM for JDK 21についてお話ししましょう。
GraalVM for JDK 21
9月19日にJDK 21用のGraalVMをリリースしました。今後のGraalVMリリースはOpenJDKのリリースと完全に一致します。これは、最新のJava機能とGraalVM機能を同時に使用できることを意味します。
コミュニティが確かに私たちの興奮を共有してくれています。
GraalVM for JDK 21については、リリース・ブログ記事またはライブ・ストリーム録画で詳しく学んでいただけます。
GraalVM for JDK 21 is here! 🚀
https://medium.com/graalvm/graalvm-for-jdk-21-is-here-ee01177dd12d
https://logico-jp.io/2023/09/22/graalvm-for-jdk-21-is-here/
いくつかのパフォーマンスと開発者エクスペリエンスのアップデートとともに、このリリースでGAになったすべてのJava機能(Project Loomからの仮想スレッドなど)も、Native Imageを含め、GraalVMで完全にサポートされています。さらにパフォーマンスも向上しました🚀
現在の取り組みに興味がある方は、GitHubでのオープンソース開発に参加してください。お分かりのように、私たちは非常に生産的な1年を過ごしました。
GraalVM compiles Java applications into native executables that start instantly, scale fast, and use fewer compute resources 🚀
https://github.com/oracle/graal

そして、このハードワークが実を結びました。GraalVMのCEパッケージは300万回ダウンロードされました!😲
Package graalvm-ce
https://github.com/graalvm/container/pkgs/container/graalvm-ce

AOT at the Speed of JIT
パフォーマンスに限界はありません。常にパフォーマンスの改善に取り組んでおり、AOTでより高速なアプリケーションが増えてきています。最新の例としては、Spring Petclinic in GraalVM for JDK 21の章をご覧ください。
AOT at the Speed of JIT
https://medium.com/graalvm/graalvm-for-jdk-21-is-here-ee01177dd12d#0df7
https://logico-jp.io/2023/09/22/graalvm-for-jdk-21-is-here/#0df7

さまざまな最適化戦略があり得ますが、経験則として、Oracle GraalVM + プロファイルガイド付き最適化(PGO) + G1GCの組み合わせを常に試してみることをお勧めします。
Optimize a Native Executable with Profile-Guided Optimizations
https://graalvm.org/latest/reference-manual/native-image/guides/optimize-native-executable-with-pgo/
4月(訳注:OpenJDKとリリースサイクルを合わせるので、おそらく3月のはず)のJDK22用GraalVMでは、さらなるパフォーマンスのアップデートを期待しています!
Machine Learning in Native Image
ランタイムがまだ発生していないAOTの世界で、コンパイラの最適化について最善の決定を下すには、プロファイリング情報が必要です。最も正確なプロファイルは、ユーザーが提供するもの、つまりPGO実行中に生成されるものです。しかし、ユーザーがPGOを行わない場合もあり、プロファイルが欠落している可能性があります。アプリケーション・プロファイルの予測は、機械学習モデルにとって完璧なタスクのように聞こえますし、実際そうです。GraalVM for JDK 20では、機械学習ベースのプロファイル推論を導入し、デフォルトのネイティブ・イメージ構成と比較して~6%の性能向上を実現しました。私たちはまた、新世代のMLベースのプロファイル推論に取り組んでいます。これは標準のNative Imageのパフォーマンスをさらに向上させることを目的としており、特にマイクロサービスのワークロードをターゲットにしています。ご期待ください。
Truffle Unchained
GraalVM for JDK 21で、私たちはTruffleの束縛を解放しました – どのGraalVMバージョンでも、そして他のJDKでもTruffleを使用できます(ただし、Graalコンパイラーで最高のパフォーマンスを得ることができます)。PythonやJavaScriptなどのTruffleやTruffle言語のプロジェクトへの追加は非常に簡単になりました。たった2つのMaven/Gradle依存関係を追加するだけです。
詳細は以下のエントリをご覧になるか、デモを実行してお試しください。
Truffle Unchained — Portable Language Runtimes as Java Libraries
https://medium.com/graalvm/truffle-unchained-13887b77b62c
https://logico-jp.io/2023/09/21/truffle-unchained-portable-language-runtimes-as-java-libraries/
Demonstration repository showing polyglot embedding with GraalVM for JDK 21 using Maven and Gradle.
https://github.com/graalvm/polyglot-embedding-demo
Ecosystem
標準のNative Imageを定期的にテストし、使用しているライブラリやフレームワークが200近くあることを認識しています。
Libraries and Frameworks Ready for GraalVM Native Image
https://graalvm.org/native-image/libraries-and-frameworks/
Native Imageとの互換性を提供し、保証するためにライブラリのメンテナに推奨する方法は、ライブラリ内で設定を作成し、出荷することです。次善の策は、GraalVM 到達可能性メタデータ・リポジトリです。
Repository which contains community-driven collection of GraalVM reachability metadata for open-source libraries.
https://github.com/oracle/graalvm-reachability-metadata
私たちは昨年、さまざまなJavaライブラリのNative Imageの設定をユーザーが投稿、共有、再利用できる一元化された場所として、このリポジトリを導入しました。それ以来、このレポには300以上の貢献が寄せられ、Spring BootやMicronautなどのいくつかのフレームワークが、カスタム実装を使用するのではなく、統一された設定のためにこのレポに移動しました。
JavaライブラリのNative Imageの設定をユーザーが投稿、共有、再利用できる一元化された場所としてこの到達可能性メタデータ・リポジトリを昨年導入しました。それ以後、このリポジトリは300以上のコントリビューションをいただきました。
Pull requests
https://github.com/oracle/graalvm-reachability-metadata/pulls?q=is%3Apr+is%3Aopen
Spring BootやMicronautといった種々のフレームワークは、カスタム実装を使うのではなく、統一設定のためにこのリポジトリに移動しました。
また、GitHub Actionsのワークフローは、1800近くのプロジェクトがsetup-graalvmを利用してくださっています。
GitHub Action for setting up GraalVM distributions
https://github.com/graalvm/setup-graalvm
Community
毎年のお気に入りのコミュニティ・イベントの一つが、GraalVM Community Meetupです。チューリッヒで開催される2日間のイベントで、パートナーやコミュニティ・メンバーと会い、最近のアップデートや今後のアップデートについて話し、様々なトピックについてワーキング・セッションを行います。(訳注:こっそり筆者も映っています)

次回のイベントは、おそらく2024年11月に開催される予定です。以下のURLや、ソーシャルメディアや発表をフォローしてください。
Community Meetup
https://graalvm.org/community/meetup/
その他のコミュニティのハイライトとしては、Devoxx Belgiumで素晴らしいコミュニティBOFセッションや、パートナーと共にNative Imageの現状と将来についてのパネルディスカッションがありました。
もう1つの大きなアップデートは、GraalVM ACEができたことです。オラクルACEプログラムは、貢献した技術エキスパートやコミュニティ・リーダーを評価し、促進するものです。私たちは、GraalVM ACEとして加わったThomas Vitale、Matt Raible、Sergio Del Amo、Ionut Balosin、そしてGraalVMの専門知識を持つ既存のACEであったGail AndersonとPaul Andersonとともに、私たち自身のACEカテゴリーを持つことができたことを大変嬉しく思っています。おめでとう、そしてようこそ!

User stories
今年のお気に入りのユーザーストーリーの一つは、パフォーマンス面の利点のために大規模なJavaアプリケーション(100,000以上のロードされたクラス、世界中の数万台のサーバー上で実行されている)をGraalVM JDKに移動したNetSuiteのお話です。GraalVMを使うことで、ワークロードによりますが平均1.07-1.08倍のスピードアップを達成し、そのうちのいくつかでは最大1.15倍のパフォーマンスを達成しました。
GraalVM at Oracle NetSuite
https://medium.com/graalvm/graalvm-at-oracle-netsuite-47501f3461a4
また、Ballerinaアプリケーションからは、GraalVMを使うことで、起動時間が980msから52msに、RSSが242MBから93MBになったという話もありました。
10MinuteMail社では、ユーザー数の増加に対応するため、GraalVMとSpring Boot 3に移行しました。彼らが達成した結果はとても素晴らしいものでした。
10 Minute Mail – Free Anonymous Temporary email – 10 Minute Mail – Free Anonymous Temporary email
https://10minutemail.com
アプリケーションの起動時間は~30秒から約3msに短縮され、さらに重要なことは、同じスループットとCPU使用率で、メモリ使用量も6.6GBから1GBに大幅に削減されました。彼らの事例は以下からご覧いただけます。
Migrating 10MinuteMail from Java to GraalVM Native
https://www.digitalsanctuary.com/10minutemail/migrating-10minutemail-from-java-to-graalvm-native.html
プルリクエスト、デモ、カンファレンスのビデオ、ブログ投稿など、今年も多くの素晴らしいコミュニティの貢献がありましたが、このブログ記事はすでに手に負えなくなっているので(また、私たちはパフォーマンスに関するあらゆることが大好きなので)、Ionut Balosin氏による関連する2つのパフォーマンス研究を紹介したいと思います。
JVM Performance Comparison for JDK 17
https://ionutbalosin.com/2023/03/jvm-performance-comparison-for-jdk-17/
Analyzing JVM Energy Consumption for JDK 17: An Empirical Study
https://ionutbalosin.com/2023/07/analyzing-jvm-energy-consumption-for-jdk-17-an-empirical-study/
「Oracle GraalVM JITコンパイラーは、この研究で他のJITコンパイラーを上回り、GraalVM Native Imageは、ランタイム実行中に最高のエネルギー効率を示した」ということです。
GraalVM Community Survey
毎年、GraalVMをより良くする方法について皆さんの意見を求めています。Native Imageのビルド時間の短縮、より互換性のあるライブラリ、パフォーマンスの向上など、皆様から寄せられた提案の多くはすでに実装されています。私たちは常に、何がうまく機能しているか、何が改善できるかについてのフィードバックを求めています。ぜひご意見をお聞かせください!(5分もかかりません)。
GraalVM Community Survey 2023
https://graalvm.typeform.com/survey
Coming up next!
Layered Native Images
GraalVM Community Meetupで、私たちは最初にNative Imageのための最も進歩的なプロジェクトの一つであるLayered Native Imagesを発表しました。
Layered Native Images #7626
https://github.com/oracle/graal/issues/7626
これは、GraalVMでネイティブ実行ファイルをビルドする全く新しい方法です。現在のNative Image(アプリケーションに必要なあらゆるコードとその依存関係をすべて含むスタンドアロンのネイティブ実行ファイル)とは異なり、Layered Native Imageは、コンテナのデプロイメントと同様に、多層方式でビルドされます。このようにして、アプリケーションは、フレームワークのコアやフレームワークのwebサーバーなど、1つまたは複数のベースイメージ上にビルドされます。こうすることで、2つの大きな目標を達成できる:この方法では、アプリケーションは、フレームワークのコアやフレームワークのウェブサーバーなど、1つまたは複数のベースイメージの上に構築されます。こうすることで、2つの大きな目標を達成できます。
- 変更を加えた後、アプリケーション・コードだけを再コンパイルすればよいので、ビルド時間を劇的に短縮できる
- ベース・イメージをアプリケーション・インスタンス間で共有し、全体的なリソース使用量を削減できる
GraalOS
GraalVMをベースとしたOS、なんともクールですね。今年の初め、Oracle Cloud WorldでGraalOSを発表しました。
GraalOS
https://graal.cloud/graalos/
これはJavaアプリケーションをデプロイする新しい方法で、Native Imageをベースにしており、デプロイ単位はコンテナではなく、実行ファイルです。こうすることで、最新のハードウェア機能を直接活用し、コンテナのデプロイや立ち上げにかかるオーバーヘッドを排除しながら、最高の分離性とスケーラビリティを確保できます。
今、GraalOSの開発に取り組んでいます!続報にご期待ください。
Conclusion
3月に予定されているGraalVMの次期リリースに積極的に取り組んでおり、Slack、GitHub、またはTwitterを通じてフィードバックをいつでもお待ちしています。
Slack invitation
https://www.graalvm.org/slack-invitation
GitHub Issues
https://github.com/oracle/graal
Twitter
https://twitter.com/graalvm
私たちのコミュニティに加わってくださり、あらゆるコントリビューション、提案、サポートに感謝します。良い休日と穏やかな休暇をお過ごしください。そして2024年にお会いしましょう!🎄