GraalVM in 2024: A year in review

原文はこちら。
This article was written by Alina Yurenko (Developer Advocate for GraalVM, Oracle Labs).
https://medium.com/graalvm/graalvm-in-2024-a-year-in-review-fe8dff967d82

今年も終盤ですが、GraalVM Projectやコミュニティで多くのエキサイティングなことがありました。このエントリではハイライトをご紹介します。

Graal JIT in Oracle JDK 23 🚀

Oracle JDK 23から、Oracle GraalVM JIT compilerがOracle JDKの一部として利用可能なコンパイラに追加されました。

Including the Graal JIT in Oracle JDK 23
https://blogs.oracle.com/java/post/including-the-graal-jit-in-oracle-jdk-23
https://logico-jp.dev/2024/09/19/including-the-graal-jit-in-oracle-jdk-23/

これにより、Oracle JDKユーザーは、GraalVMがもたらす高度なパフォーマンス最適化を簡単に利用できるようになりました! Oracle GraalVM JIT を使用することによるパフォーマンスの利点を示す研究はいくつかあります。ルネサンス・ベンチマーク・スイートや、Ionut Balosinと Florin Blanaruによるパフォーマンスの研究を参照してください。

Renaissance Suite
https://renaissance.dev/
JVM Performance Comparison for JDK 21
https://ionutbalosin.com/2024/02/jvm-performance-comparison-for-jdk-21/

さあ、Graal JITを試してみましょう!

Faster than ever on JIT and AOT 🏁

Graal JITは非常に高速であることで知られています。偶然ユーザーがこれに気付いて、チューニングを一切せずにパフォーマンスの向上を観察しているのを目にして、うれしく思っています。

GraalVM performing much better than regular VMs. Feature of Graal or bug of regular VMs? #10298
https://github.com/oracle/graal/issues/10298#issuecomment-2538928355

私たちがAOTをJITの速度で実現するという大きなビジョンを持っていることはご存知かもしれません。そして、リリースごとにその目標に向かって取り組んでいます。複数のパフォーマンス指標を常に追跡し、Native Image によって、高速な起動と低メモリフットプリントに加えて、最高のピークパフォーマンスが得られることを確認しています。ベンチマークアプリケーションの1つは、Spring PetClinicです。GraalVM for JDK 23 では、Ampere A1 マシンでベンチマークを行いました。 その結果は次のとおりです。

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

Performance of Spring PetClinic with Oracle GraalVM Native Image and GraalVM CE JIT. The benchmarking experiment ran the latest Spring PetClinic on Ampere A1 servers.

GraalVM for JDK 24では、さらに多くの最適化が予定されています!

Parsing 1 Billion Rows in Java in 0.3 Seconds 🤯

スピードと言えば、年初に終了した1BRC 1️⃣🐝🏎️チャレンジも忘れるわけにはいきません。

1️⃣🐝🏎️ The One Billion Row Challenge
https://github.com/gunnarmorling/1brc

この競技や参加者が使用したパフォーマンス最適化の手法を詳しく分析した素晴らしいブログ記事が数多く投稿されています。そのほとんどが、手動チューニングを行う前に、最初からパフォーマンスの向上が期待できる高度なコンパイラを選択することから始めるべきであると提案しています。また、Graal JITは、JITモードでもAOTモードでも、この競技全体を通して輝きを放っていました。クリスマス休暇中に楽しく学べる動画を探しているなら、Devoxx BelgiumでのThomas WuerthingerRoy van Rijnによる1BRCの徹底解説をお勧めします。

Native Image developer experience 👩‍💻

Native Imageを使用した開発者の体験は我々の優先事項のひとつであり、ここ数年で大幅に進化しました。 常にビルドの所要時間とリソースの削減に取り組んでおり、リリースごとに改善が見られます。 また、Marcus Hellbergが指摘しているように、非常に高性能なマシンを使用しても損はありません。

Build time of a Spring Boot & Vaadin application on Apple M4 Max vs M1 Pro

現在、GraalVMを本番環境で使用するユーザーがますます増えているため、ライブラリをスムーズに使用できることが非常に重要になっています。このため、Native Build Tools(NBT)、MavenおよびGradleプラグインでは、GraalVM Reachability Metadataリポジトリへのアクセスがデフォルトで可能になりました。

GraalVM Reachability Metadata Repository
https://github.com/oracle/graalvm-reachability-metadata

これにより、NBTを使用するプロジェクト(およびNBTに依存するフレームワーク)では、既知のライブラリの構成が自動的に解決されるようになります。また、Native Imageで簡単に構築できるものを増やし、スムーズな体験を実現するために、フレームワークやライブラリのチームと積極的に協力しています。現在、私たちのコミュニティが管理するフレームワークとライブラリのリスト(Native Imageと統合)には、200以上のプロジェクトが含まれています!🤯

Libraries and Frameworks Ready for GraalVM Native Image
https://www.graalvm.org/native-image/libraries-and-frameworks/

また、Native Imageの構成と使いやすさを向上させるプロジェクトにも取り組んでいます。

GraalVM Community Roadmap
https://github.com/orgs/oracle/projects/6

2024年には、新たなMark & Compactガベージコレクタ、新たなサイズ最適化レベルなど、Native Imageの素晴らしい新機能がいくつか導入されました。これらの詳細については、リリースブログ記事(GraalVM for JDK 23GraalVM for JDK 22)をご覧ください。

New Compacting Garbage Collector
https://medium.com/graalvm/welcome-graalvm-for-jdk-23-203928491b2b#f182
https://logico-jp.dev/2024/09/25/welcome-graalvm-for-jdk-23/#f182
Smaller executables
https://medium.com/graalvm/welcome-graalvm-for-jdk-23-203928491b2b#6ebb
https://logico-jp.dev/2024/09/25/welcome-graalvm-for-jdk-23/#6ebb

Welcome, GraalVM for JDK 23!
https://medium.com/graalvm/welcome-graalvm-for-jdk-23-203928491b2b
https://logico-jp.dev/2024/09/25/welcome-graalvm-for-jdk-23/
Welcome, GraalVM for JDK 22!🚀
https://medium.com/graalvm/welcome-graalvm-for-jdk-22-8a48849f054c
https://logico-jp.dev/2024/03/21/welcome-graalvm-for-jdk-22/

2025年には、開発者体験のさらなる改善が期待されます!

Graal Languages

GraalPyとGraalWasmは安定した状態に到達し、本番環境での作業に利用できるようになりました。これらは、サポート対象のGraal languagesとしてJavaとJavaScriptに加わりました。

今年、GraalPyの互換性と開発者エクスペリエンスの改善に多くの労力を費やしました。

GraalPy: Package Compatibility
https://www.graalvm.org/python/compatibility/

Graal languagesをJavaに組み込むには、Mavenの依存関係を2個、具体的には

  • org.graalvm.polyglot:polyglot
  • org.graalvm.polyglot:python

を追加するだけでよいことを覚えているかもしれません。また、graalpy-maven-plugin(またはgraalPy Gradle)を使用して、通常のJavaビルド構成の一部として組み込みを簡単に設定することもできます。

GraalPy Maven Plugin Configuration
https://www.graalvm.org/latest/reference-manual/python/Embedding-Build-Tools/#graalpy-maven-plugin-configuration
GraalPy Gradle Plugin Configuration
https://www.graalvm.org/latest/reference-manual/python/Embedding-Build-Tools/#graalpy-gradle-plugin-configuration

さらに、GitHub Actionのsetup-python内でGraalPyを使用できるようになりました。

言語関連のもう一つの大きなアップデートは、2年間の研究開発を経て、ついにバイトコード DSLをマージしたことです。バイトコードインタプリタは AST と同等のピークパフォーマンスを発揮しますが、より少ないメモリでエンコードでき、さらなるパフォーマンス最適化の恩恵を享受できます。

Bytecode DSL
https://github.com/oracle/graal/blob/master/truffle/docs/bytecode_dsl/BytecodeDSL.md

Graal 言語を始める最も簡単な方法として、デモをお試しください。

Graal Languages – Demos and Guides
https://github.com/graalvm/graal-languages-demos

Community and User Stories

コミュニティと緊密に連携し、生産的なパートナーシップを構築し、貴重なフィードバックを得て、皆さまのためにGraalVMをさらに改善しています。 コラボレーションのための私たちの最もお気に入りのプラットフォームの1つが、毎年開催されるGraalVM Community Summitです。 チューリッヒで2日間にわたって開催されるこのイベントでは、パートナーやコミュニティメンバーと会い、最近のアップデートやロードマップについて話し合い、さまざまなトピックに関する作業セッションを行います。 このイベントは毎年規模が大きくなっており、私たちのオフィスの収容人数はすでに限界に達しています。今年は、Alibaba、Amazon、Apple、BellSoft、Broadcom、Enso、Google、JetBrains、Microsoft、MicroDoc、Neo4J、Red Hat、SAP、Shopify、TornadoVM、その他多数の企業から代表者が参加し、GraalVMチーム全員も参加するなど、非常に素晴らしい顔ぶれとなりました。

Photos of attendees at the GraalVM Community Summit.
GraalVM Community Summit 2024

今年はオープンソースコミュニティとガバナンスにとって非常に実りの多い年でした。GraalVM backportリポジトリのリードメンテナを公募し、GraalVMプロジェクトへのコントリビューションと関連ディストリビューションのメンテナンスの実績を持つFoivos Zakkakがリードメンテナを務めることになりました。

また、MicrosoftのSandra AhlgrimmがGraalVM Advisory Boardに参加し、プロジェクトの推進とビジョンへの貢献を支援してくださることになりました。

GraalVM Project Advisory Board
https://www.graalvm.org/community/meetup/

コミュニティやユーザーからの注目すべきアップデートをいくつかご紹介します。

GitHub上の2000以上のリポジトリで、GraalVM GitHub actionが利用されています!🚀

Dependency Graph
https://github.com/graalvm/setup-graalvm/network/dependents

GraalVMがIntelliJ IDEAと連携しました!❤️

IntelliJ IDEAチームとの素晴らしいコラボレーションにより、ユーザー向けの素晴らしい機能がいくつか実装されました。GraalJSは現在、最新のHTTPクライアント実行エンジンとして動作し、Polyglotアプリケーションのシンタックスハイライトが可能になり、さらに最近では、GraalVM Native Imageのデバッグ体験の簡素化に取り組んでいます。

GraalJS as the execution engine for the HTTP Client
https://blog.jetbrains.com/idea/2024/06/intellij-idea-2024-2-eap-5/#graaljs-as-the-execution-engine-for-the-http-client
What’s New in IntelliJ IDEA 2024.3
https://www.jetbrains.com/idea/whatsnew/

State of Springの調査結果が発表され、興味深い洞察が示されました。

State of Spring Survey 2024 Results
https://spring.io/blog/2024/06/03/state-of-spring-survey-2024-results

Spring Bootユーザーの11%はすでにGraalVMでネイティブコンパイルされたアプリケーションを本番環境で実行しており、26%のユーザーは現在評価中、そして31%のユーザーはGraalVMでネイティブアプリケーションを開発する計画を立てています!

llama3.java

今年私が気に入っているプロジェクトの1つは、当社の優秀な同僚であるAlfonso² Peterssenが開発したllama3.javaで、これは完全なJavaによるLLM推論エンジンです!

llama3.java
https://github.com/mukel/llama3.java
Alfonso² Peterssen
https://github.com/mukel

CもPythonも不要で、クラウドベースのLLMへの依存性も呼び出しもありません。完全な推論エンジンであり、モデルとともに、本格的なローカルLLMアシスタントを提供します。裏では FFM & Vector API のパワーを活用し、GraalVM を使用してオーバーヘッドゼロでアプリケーションを起動します。 なんとクールなことでしょう!👾

Google Java Code Formatter

Google Java Code Formatterが、GraalVM で構築された、非常に高速なプラットフォーム固有のネイティブバイナリ実行形式として利用可能になりました。

google-java-format
https://github.com/google/google-java-format

Pkl

Apple は、Truffle の上に構築された新しい構成言語、Pklを発表しました。

Pkl
https://pkl-lang.org/index.html

Timefold Solver の起動時間

Native Image を使用すると、Timefold Solver の起動を 20 倍も高速化できます!

How to speed up Timefold Solver Startup Time by 20x with native images
https://timefold.ai/blog/how-to-speed-up-timefold-solver-startup-time-by-20x-with-native-images

AWS CRT Client for JavaでのNative Imageサポート

AWS は AWS CRT Client for Java に Native Image のサポートを追加し、コールドスタートのリクエスト処理時間を 90% のリクエストで1/4に短縮しました。

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/

MicrometerとNative Image

Micrometerを使用すると、複数のプラットフォームおよびバックエンドに可視性データを渡すことができ、Native Image と完璧に連携します。

Let’s use OpenTelemetry with Spring
https://spring.io/blog/2024/10/28/lets-use-opentelemetry-with-spring

setup-java

setup-javaアクションで、GraalVMをJDKとして選択・利用できるようになりました。

Add support for Oracle GraalVM #501
https://github.com/actions/setup-java/pull/501

native Kafka Docker image

GraalVMベースの新たなNative Kafka Docker Imageを使用して、Testcontainers で Kafkaアプリケーションの統合テストを実行することが非常に簡単になりました! 😍

KIP-974: Docker Image for GraalVM based Native Kafka Broker
https://cwiki.apache.org/confluence/display/KAFKA/KIP-974%3A+Docker+Image+for+GraalVM+based+Native+Kafka+Broker

Native Kafka with GraalVM

Conclusions

3月に予定されているGraalVMの次期リリースに向けて積極的に取り組んでいます。また、Native Image Layers、GraalOS、そしてすべてのプロジェクトにおけるさらなる互換性とパフォーマンスの向上など、GraalVMの領域における複数の主要プロジェクトも進行中です。

Native Image Layers
https://github.com/oracle/graal/issues/7626
GraalOS
https://graal.cloud/graalos/

コミュニティに加わってくださり、そして皆さまからのコントリビューション、提案、サポートに感謝いたします。年末年始をゆっくりお過ごしください。2025年にまたお会いできることを楽しみにしています!🎄

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください