原文はこちら。
The original article was written by Sharat Chander (Director, Java SE Product Management, Oracle).
https://blogs.oracle.com/java/post/the-arrival-of-java-24
JDK 24 is now available!
Oracleは開発者、企業、エンドユーザー向けにJDK 24の一般提供を発表します。
New with Java 24
JDK 24には8個のプレビュー機能と1個のインキュベーター機能を含む、JDK Enhancement Proposals(JEP)に値するほど重要な24個の拡張機能が提供されます。 これらは、Java言語、API、パフォーマンス、および JDK に含まれるツールの改善をカバーしています。
JDK 24
https://openjdk.org/projects/jdk/24/
JEP 1: JDK Enhancement-Proposal & Roadmap Process
https://openjdk.org/jeps/1
Language Improvements:
Primitive Types in Patterns, instanceof, and switch 2nd Preview [JEP 488]
https://openjdk.org/jeps/488
すべてのパターンコンテキストでプリミティブ型を許可することでパターンマッチングを強化し、instanceofおよびswitchをすべてのプリミティブ型で動作するように拡張します。これはプレビュー版の言語機能です。
JEP 12: Preview Features
https://openjdk.org/jeps/12
Flexible Constructor Bodies 3rd Preview[JEP 492]
https://openjdk.org/jeps/492
Javaプログラミング言語のコンストラクタにおいて、明示的なコンストラクタ呼び出し(すなわち、super(..)またはthis(..))の前にステートメントを記述できるようにします。これらのステートメントは、構築中のインスタンスの参照はできませんが、フィールドの初期化は可能です。別のコンストラクタを呼び出す前にフィールドを初期化することで、メソッドがオーバーライドされている場合のクラスの信頼性が向上します。これはプレビュー版の言語機能です。
Module Import Declarations 2nd Preview [JEP 494]
https://openjdk.org/jeps/494
Javaプログラミング言語を拡張し、モジュールがエクスポートするすべてのパッケージを簡潔にインポートできるようにします。これにより、モジュール・ライブラリの再利用が簡素化されますが、インポートするコードがモジュール自体にある必要はありません。これはプレビュー版の言語機能です。
Simple Source Files and Instance Main Methods 4th Preview [JEP 495]
https://openjdk.org/jeps/495
Javaプログラミング言語を進化させ、大規模プログラム向けに設計された言語機能を理解しなくても、初心者でも最初のプログラムを作成できるようにします。言語の別の方言を使用するのではなく、初心者でも単一クラスのプログラムの簡潔な宣言を作成でき、スキルが向上するにつれて、より高度な機能を使用してプログラムをシームレスに拡張できます。経験豊富な開発者も、大規模なプログラミングを目的とした構文を使用せずに、簡潔に小規模なプログラムを作成できます。これはプレビュー版の言語機能です。
Libraries
Stream Gatherers [JEP 485]
https://openjdk.org/jeps/485
Stream APIを拡張し、カスタムの中間操作をサポートします。これにより、ストリーム・パイプラインで、既存の組み込みの中間操作では容易に達成できない方法でデータを変換できるようになります。
java.util.stream (Java SE 21 & JDK 21)
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/stream/package-summary.html
Class File API [JEP 484]
https://openjdk.org/jeps/484
Javaクラス・ファイルの解析、生成、変換用の標準APIを提供します。
Scoped Values 4th Preview [JEP 487]
https://openjdk.org/jeps/487
Scoped value (スコープ付き値) を導入し、メソッドがスレッド内の呼び出し元と子スレッドの両方で不変データを共有できるようにします。 Scoped valueはスレッドローカル変数よりも扱いやすくなります。 また、Virtual threadsやStructured concurrencyと併用した場合、使用するメモリと時間が少なくて済みます。 これはpreview APIです。
JEP 444: Virtual threads
https://openjdk.org/jeps/444
JEP 480: Structured concurrency
https://openjdk.org/jeps/480
Vector API 9th Incubator [JEP 489]
https://openjdk.org/jeps/489
サポート対象のCPUアーキテクチャ上で、実行時に最適なベクトル命令に確実にコンパイルされるベクトル計算を表現するAPIを導入し、同等のスカラー計算よりも優れたパフォーマンスを実現します。
Structured Concurrency 4th Preview [JEP 499]
https://openjdk.org/jeps/499
structured concurrencyのためのAPIを導入することで、並行プログラミングを簡素化します。structured concurrencyは、異なるスレッドで実行される関連タスクのグループを単一の作業単位として扱うことで、エラー処理とキャンセルをシンプルにし、信頼性を向上させ、可視性を拡張します。 これはPreview API です。
Performance and Runtime
Compact Object Headers Experimental [JEP 450]
https://openjdk.org/jeps/450
HotSpot JVMのオブジェクト・ヘッダーのサイズを、64ビット・アーキテクチャ上で96ビットから128ビットだったものを64ビットに縮小します。これにより、ヒープ・サイズが縮小され、デプロイメントの密度が向上し、データの局所性が向上します。
Late Barrier Expansion for G1 [JEP 475]
https://openjdk.org/jeps/475
G1 GCのバリアの実装を簡素化します。バリアは、アプリケーションのメモリー・アクセスに関する情報を記録するもので、その拡張を C2 JIT のコンパイル・パイプラインの初期から後期に移行することで実現します。
Ahead-of-Time Class Loading & Linking [JEP 483]
https://openjdk.org/jeps/483
HotSpot Java 仮想マシン起動時に、アプリケーションクラスをロードおよびリンク済みの状態で即座に利用できるようにすることで、起動時間を短縮します。これは、アプリケーションの実行中にアプリケーションを監視し、ロードおよびリンクされたすべてのクラスの形式をキャッシュに保存することで実現します。これにより、起動時間とウォームアップ時間の両方について、将来的な改善の基盤が整います。
ZGC: Remove the Non-Generational Mode [JEP 490]
https://openjdk.org/jeps/490
ZGC (Z Garbage Collector) の非世代別モードを削除し、ZGC のデフォルトを世代別モードにします。
Synchronize Virtual Threads without Pinning [JEP 491]
https://openjdk.org/jeps/491
synchronizedメソッドやステートメントを使用する Java コードのスケーラビリティを改善します。このような構造でブロックする仮想スレッドが、その基盤となるプラットフォームスレッドを他の仮想スレッドが使用できるように解放するようにします。これにより、仮想スレッドがプラットフォームスレッドにピン留めされることがほぼなくなるため、アプリケーションのワークロードを処理するために使用可能な仮想スレッドの数が大幅に制限されなくなります。
Platform threads
https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Thread.html#platform-threads
Pinning
https://openjdk.org/jeps/444#Pinning
Security Libraries
Key Derivation Function API Preview [JEP 478]
https://openjdk.org/jeps/478
秘密鍵とその他のデータから追加の鍵を派生させる暗号アルゴリズムである Key Derivation Functions (KDFs) のための API を導入します。これはPreview API です。
Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism [JEP 496]
https://openjdk.org/jeps/496
量子耐性モジュール格子基盤・鍵カプセル化メカニズム(ML-KEM)の実装を提供することで、Javaアプリケーションのセキュリティを拡張します。鍵カプセル化メカニズム(KEM)は、安全ではない通信チャネル上の対称鍵を公開鍵暗号で保護するために利用されます。ML-KEMは、将来的な量子コンピューター攻撃に対しても安全であるように設計されています。米国標準技術局(NIST)により、FIPS 203で標準化されています。
FIPS 203 Module-Lattice-Based Key-Encapsulation Mechanism Standard
https://csrc.nist.gov/pubs/fips/203/final
Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm [JEP 497]
https://openjdk.org/jeps/497
量子耐性モジュール格子ベースデジタル署名アルゴリズム(ML-DSA)の実装を提供することで、Javaアプリケーションのセキュリティを拡張します。デジタル署名は、データへの不正な変更を検知したり、署名者の身元を認証したりするために使用されます。ML-DSAは、将来的な量子コンピューティング攻撃に対して安全であるように設計されています。米国国立標準技術研究所(NIST)により、FIPS 204で標準化されています。
FIPS 204 Module-Lattice-Based Digital Signature Standard
https://csrc.nist.gov/pubs/fips/204/final
Source Code (won’t affect JDK binaries)
Generational Shenandoah (Experimental) [JEP 404]
https://openjdk.org/jeps/404
持続可能なスループット、負荷スパイクへの耐性、およびメモリ使用率を向上させるため、実験的な世代別収集機能でShenandoah GCを拡張します。
Shenandoah
https://openjdk.java.net/projects/shenandoah/
Linking Run-Time Images without JMODs [JEP 493]
https://openjdk.org/jeps/493
JDKのJMODファイルを使用せず、jlinkツールを使ってカスタムのランタイムイメージを作成できるようにすることで、JDKのサイズを約25%削減します。この機能はJDKのビルド時に有効にする必要があります。デフォルトでは有効になっておらず、JDKベンダーによっては有効にしないことを選択する場合もあります。
Maintenance and Clean Up
Prepare to Restrict the Use of JNI [JEP 472]
https://openjdk.org/jeps/472
Java Native Interface (JNI)の使用について警告を発行し、Foreign Function & Memory (FFM) APIを調整して一貫した方法で警告を出すようにします。このような警告はすべて、JNI と FFM API を統一的に制限することで、Integrity by Defaultを確保する将来のリリースに向けて開発者に備えてもらうことを目的としています。 アプリケーション開発者は、必要な場合にこれらのインターフェースを選択的に有効にすることで、現在の警告と将来の制限の両方を回避できます。
Java Native Interface Specification Contents
https://docs.oracle.com/en/java/javase/22/docs/specs/jni/index.html
JEP 454: Foreign Function & Memory API
https://openjdk.org/jeps/454
JEP draft: Integrity by Default
https://openjdk.org/jeps/8305968
Remove the Windows 32-bit x86 Port [JEP 479]
https://openjdk.org/jeps/479
Windows 32 ビット (x86) 用のソースコードとビルドサポートを削除します。このポートは、将来のリリースで削除するという明確な意図のもと、JDK 21で削除するために非推奨とされました。
JEP 449: Deprecate the Windows 32-bit x86 Port for Removal
https://openjdk.org/jeps/449
Permanently Disable the Security Manager [JEP 486]
https://openjdk.org/jeps/486
Security Managerは長年、クライアント側のJavaコードをセキュアにする主要な手段ではありませんでしたし、サーバ側のコードをセキュアにするために使われることもほとんどありませんでした。そのため、2021年、Java 17で削除するために非推奨とするJEP 411を出しました。Security Managerの廃止に向けた次のステップとして、開発者がSecurity Managerを有効にできず、他のプラットフォーム・クラスがSecurity Managerを参照しないように、Javaプラットフォーム仕様を改訂する予定です。この変更は、大多数のアプリケーション、ライブラリ、ツールに影響を与えません。将来のリリースでは、Security Manager APIを削除する予定です。
JEP 411: Deprecate the Security Manager for Removal
https://openjdk.org/jeps/411
Warn upon Use of Memory-Access Methods in sun.misc.Unsafe [JEP 498]
https://openjdk.org/jeps/498
sun.misc.Unsafeのメモリアクセスメソッドが最初に呼び出されたときに、実行時に警告を表示します。これらのサポートされていないメソッドはすべて、JDK 23で最終的に非推奨となりました。これらは標準 API、すなわち VarHandle API (JDK 9に含まれるJEP 193) と Foreign Function & Memory API (JDK 22に含まれるJEP 454) に取って代わられました。アプリケーションを最新の JDK リリースにスムーズに移行できるよう、ライブラリ開発者にはsun.misc.Unsafeからサポートされる代替 API に移行することを強く推奨します。
JEP 193: Variable Handles
https://openjdk.org/jeps/193
JEP 454: Foreign Function & Memory API
https://openjdk.org/jeps/454
Deprecate the 32-bit x86 Port for Removal [JEP 501]
https://openjdk.org/jeps/501
将来のリリースで 32 ビット (x86) を削除する予定です。これにより、JDK に残っている唯一の 32 ビット (x86) である Linux 32 ビット (x86) が非推奨となります。また、事実上、下流に残っている32ビット (x86) もすべて非推奨になります。32ビット (x86) が削除された後は、アーキテクチャに依存しないZeroポートが、32ビットx86プロセッサ上でJavaプログラムを実行する唯一の方法になります。
A reminder on Preview and Incubator features
プレビュー機能は、Java SEプラットフォームの言語機能またはVM機能として完全に仕様策定され、実装完了、もしくは実装中のものです。これらは、将来のリリースで恒久的なものになる前に、実際の使用に基づく開発者のフィードバックを可能にするために、JDK機能リリースで利用できます。これはまた、ツールベンダーに、Java SE Standardに最終化される前の機能のサポートに取り組む機会を与えるものでもあります。インキュベーター・モジュールのAPIは、最終化されていないAPIやツールを開発者やユーザーの手元に置くことで、最終的にJavaプラットフォームの品質を向上させるフィードバックを集めることができます。
JEP 11: Incubator Modules
https://openjdk.org/jeps/11
Other changes
JEPs で説明されている変更点の他に、リリースノートには多くのアプリケーション開発者やシステム管理者が関心を持つであろう、より小さな変更点が数多く記載されています。 これらには、廃止されたAPIの非推奨化や、以前非推奨だったAPIの削除などが含まれています。
JDK 24 Release Notes
https://jdk.java.net/24/release-notes
Java 24のリリースノートから、主なアップデートを紹介します。
[security-libs/javax.net.ssl] Configurable New Session Tickets Count for TLSv1.3 (JDK-8328608)
https://bugs.openjdk.org/browse/JDK-8328608
新しいシステムプロパティ jdk.tls.server.newSessionTicket は、JSSE サーバーがセッションごとに送信する TLSv1.3 再開チケットの数を設定します。 このプロパティは、-Djdk.tls.server.newSessionTicket=#というコマンドラインで設定でき、#は0から10の値をとります。 既定値は1です。
[security-libs/javax.net.ssl] Mechanism to Disable TLS Cipher Suites by Pattern Matching (JDK-8341964)
https://bugs.openjdk.org/browse/JDK-8341964
TLS暗号スイートは、java.security構成ファイルのセキュリティプロパティであるjdk.tls.disabledAlgorithmsで、1個以上のワイルドカード文字を使用して無効化できます。例えば、TLS_RSA_と指定すると、TLS_RSA_で始まるすべての暗号スイートが無効になります。TLS_で始まる暗号スイートのみ、ワイルドカード文字を使用できます。
[tools/jar] New Option to Extract a JAR File to a Specific Directory Using the jar Tool (JDK-8173970)
https://bugs.openjdk.org/browse/JDK-8173970
The jar tool’s extract operation has been enhanced to allow the --dir or the -C options to be used to specify the directory where the archive will be extracted.
JAR ツールの抽出操作が拡張され、--dirまたは-Cオプションを使用し、アーカイブの抽出先ディレクトリを指定できるようになりました。
# 利用例
jar -xf foo.jar -C /tmp/bar/
# もしくは
jar --extract --file foo.jar --dir /tmp/bar/
これらのコマンドのいずれかを使用すると、foo.jarが/tmp/barディレクトリに展開されます。
[core-libs/java.io] New Reader.of(CharSequence) Method (JDK-8341566)
https://bugs.openjdk.org/browse/JDK-8341566
java.io.Reader.of(CharSequence) というstaticファクトリー・メソッドが追加され、CharSequenceから文字を読み取るReaderを取得できるようになりました。CharSequence例としては、StringやStringBuilderがあります。後者はStringへの変換と同期が必要となるため、場合によっては、java.io.StringReaderを使用するよりも、取得したReaderを使用する方が効率的です。
[core-libs/java.lang] New Method Process.waitFor(Duration) (JDK-8336479)
https://bugs.openjdk.org/browse/JDK-8336479
java.lang.Process#waitFor(Duration)という、新しいオーバーロードメソッドが追加されました。タイムアウトを伴う既存のwaitFor()メソッドでは、プリミティブなタイムアウト値とタイムアウトの単位の両方が必要でした。新しいメソッドでは、java.time.Durationを使用するため、ユーザーが単位について混乱することがなくなります。
[core-libs/java.lang] Support for Unicode 16.0 (JDK-8319993)
https://bugs.openjdk.org/browse/JDK-8319993
今回のリリースでは、Unicodeバージョンが16.0にアップグレードされ、Unicode Character DatabaseとUnicode Standard Annexes #9、#15および#29の更新版が含まれています。
java.lang.CharacterクラスはUnicode Character Databaseをサポートします。これにより、5,185文字が追加され、合計154,998文字となりました。新たに追加されたのは、以下の7つの文字です。
| Garay | 西アフリカで現代的に使用されている文字 |
| Gurung Khem Kirat Rai Ol Onal Sunuwara | 北東インドおよびネパールで現代的に使用されている4つの文字 |
| Todhri | アルバニア語で使用されている歴史的な文字 |
| Tulu-Tigalari | 南西インドの歴史的な文字 |
java.text.Bidiクラスとjava.text.Normalizerクラスは、それぞれUnicode Standard Annexes #9と#15をサポートしています。java.util.regexパッケージは、Unicode Standard Annex #29に基づく拡張グラフ文字クラスタをサポートしています。
Unicode 16.0の詳細は、Unicodeコンソーシアムのリリースノートを参照してください。
Unicode® 16.0.0
https://unicode.org/versions/Unicode16.0.0/
[core-libs/java.util.jar] New JAR Command Option to Not Overwrite Existing Files (JDK-8335912)
https://bugs.openjdk.org/browse/JDK-8335912
jarツールの展開操作が拡張され、--keep-old-filesおよび-kオプションを使用して既存のファイルの上書きを防止できるようになりました。
# 利用例
jar xkf foo.jar
# もしくは
jar --extract --keep-old-files --file foo.jar
これらのコマンドのいずれかを使用すると、foo.jarの内容が抽出されます。 ターゲット・ディレクトリに同じ名前のエントリがすでに存在する場合は、既存のファイルは上書きされません。
[core-svc/java.lang.management] New MXBean to Monitor and Manage Virtual Thread Scheduler (JDK-8338890)
https://bugs.openjdk.org/browse/JDK-8338890
JDK固有の新しい監視および管理インターフェースである jdk.management.VirtualThreadSchedulerMXBeanが追加され、Java Management Extension (JMX) ベースのツールでvirtual threadスケジューラの監視および管理が可能になりました。 このインターフェースは、virtual threadスケジューラのターゲット並列性、スケジューラで使用されるスレッド、およびスケジューラにキューイングされたvirtual threadの個数を監視できます。 また、スケジューラのターゲット並列性を動的に変更することも可能です。
[core-svc/tools] New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers (JDK-8337199)
https://bugs.openjdk.org/browse/JDK-8337199
virtual threadの問題を診断する際に役立つ情報を表示する 2個のコマンドがjcmdコマンドライン・ツールに追加されました。
jcmd <pid> Thread.vthread_scheduler
virtual threadスケジューラ、ターゲット並列性、スレッド数、およびその他の有用なカウンタを表示します。出力には、virtual threadによる時間指定操作をサポートする遅延タスク・スケジューラも含まれます。
jcmd <pid> Thread.vthread_pollers
ブロッキング・ネットワーク I/O 操作を行うvirtual threadをサポートする I/O pollerを出力します。
[security-libs] Support for Including Security Properties Files (JDK-8319332)
https://bugs.openjdk.org/browse/JDK-8319332
java.securityセキュリティ・プロパティ・ファイルとjava.security.propertiesシステム・プロパティによって参照されるファイルが、他のプロパティ・ファイルをインクルードできるようになりました。この目的のために、 include <path-to-a-file> ディレクティブを使用できます。ファイルをインクルードする効果は、インクルードした箇所でそのプロパティをインラインで定義することと同じです。詳細な情報と例は、『セキュリティ開発者ガイド』の「セキュリティ・プロパティ・ファイルのインクルード」のセクションと JDK-8319333 にあります。
Including a Security Properties File
https://docs.oracle.com/en/java/javase/24/security/security-properties-file.html#GUID-FF09EB34-CD27-4D1B-B55B-A4A4E6A0F039
[JDK-8319333] Security properties files inclusion
https://bugs.openjdk.org/browse/JDK-8319333
この変更の結果、includeという名前は、セキュリティ・プロパティ・ファイルのプロパティを定義するために使用できなくなりました。includeという名前がjava.security.Security::getProperty APIまたは::setProperty APIに渡されると、IllegalArgumentExceptionがスローされます。
[security-libs/java.security] Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature (JDK-8248981)
https://bugs.openjdk.org/browse/JDK-8248981
PSSParameterSpecアルゴリズム名の新しいセクションが Java Security Standard Algorithm Names仕様に追加されました。このセクションには、PSSParameterSpecオブジェクトでRSASSA-PSS署名を初期化するときに指定できる標準ハッシュ・アルゴリズムとメッセージ生成関数 (MGF) アルゴリズムが列挙されています。
Java Security Standard Algorithm Names
https://docs.oracle.com/en/java/javase/24/docs/specs/security/standard-names.html
[security-libs/javax.crypto:pkcs11] SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism If Supported by Native PKCS11 Library (JDK-8330842)
https://bugs.openjdk.org/browse/JDK–8330842
SunPKCS11プロバイダが強化され、Cipherサービスタイプで以下のAES CTS変換をサポートするようになりました。
- AES/CTS/NoPadding
- AES_128/CTS/NoPadding
- AES_192/CTS/NoPadding
- AES_256/CTS/NoPadding
Addendum to NIST Special Publication 800-38Aでは、CBCモードについて 3 種類のCiphertext Stealing(CBC-CS1、CBC-CS2、CBC-CS3)を定義しています。
Addendum to NIST Special Publication 800-38A
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a-add.pdf
CS3 バリアントを使用するSunJCEや Kerberos との相互運用性を確保するため、SunPKCS11プロバイダーは、基盤となるPKCS #11ライブラリによって実装されているバリアントを把握し、CS3バリアントでない場合はデータを変換する必要があります。cipherTextStealingVariantというSunPKCS11プロバイダーの新しい構成属性が導入され、CS1、CS2、CS3 のいずれかの値を設定する必要があります。これらは、基礎となる PKCS #11 ライブラリの CTS バリアントを示します。NSSはCS1であることが知られているので例外です。それ以外の場合、PKCS #11 CKM_AES_CTS メカニズムは無効化されます。
[tools/javadoc(tool)] New Summary Page for External Specifications (JDK-8344041)
https://bugs.openjdk.org/browse/JDK-8344041
APIドキュメントには、Java SEおよびJDK APIが参照する外部仕様の一覧を示す新しい概要ページが含まれています。新しい概要ページへのリンクは、APIドキュメントのナビゲーション・バーにリンクされているインデックス・ページにあります。
[tools/jpackage] jpackage Supports WiX Toolset v4 and v5 on Windows (JDK-8319457)
https://bugs.openjdk.org/browse/JDK-8319457
jpackageはWindows上で、v3に加えてWiX Toolset v4とv5を使用できます。自動的に最新のインストール済みバージョンを選択します。
jpackageはWiX v3およびv4形式のカスタムWiXソースをサポートしています。WiX Toolset v4またはv5を使う場合、jpackageはWiX v3フォーマットのカスタムWiXソースをWiX v4フォーマットに自動的に変換します。
最後に、すべての機能リリースと同様に、JDK 23には、基本となるOSやファームウェアのアップデートや標準への適応を含む、パフォーマンス、安定性、セキュリティに関する何百ものアップデートが含まれています。ユーザーやアプリケーション開発者は通常、これらの変更に気づくことなく恩恵を受けていますが、それぞれの変更に関する情報はOpenJDKのissue trackerで確認できます。
And the constant feature, included in all JDK releases: Predictability
JDK 24は、6ヶ月のリリース・ケイデンスを通じて予定通りに提供される15番目の機能リリースです。このレベルの予測可能性により、開発者は着実な改良の流れのおかげで、イノベーションの採用を容易に管理できます。

パフォーマンス、安定性、およびセキュリティを向上させるJavaの能力により、Javaは世界で最も人気のあるプログラミング言語となっています。
Oracleは、JDK 24の長期サポートを提供しません。Oracleは、JDK 24がOracle JDK 25に取って代わる2025年9月までアップデートを提供します。
Java 24, Together
これまでのリリースと同様に、Java 24はOpenJDKコミュニティの多くの個人や組織の貢献によるものです — we all build Java, together!
JDK 24 Fix Ratio
JDKリリースの経時的な変更率は、何年もの間大きく変わることはありませんが、6ヶ月のケイデンスの下で、実運用に耐えうる機能や改善が提供されるペースは急激に増加しています。
JDK 24の変更点は、重要な新機能から小規模な拡張、日常的なメンテナンス、バグ修正、ドキュメントの改善まで多岐にわたります。各変更は、JDK Bug Systemの1つの課題に対する1つのコミットで表されます。
External JDK 20 Contributors
https://bugs.openjdk.org/issues/?filter=43801
各機能リリースのGA時点で、Java 11からJava 24で修正済みとマークされた31,187件のJIRAのIssueのうち、22,107件はOracle従業員が完了し、9,080件は個人の開発者や他の組織で働く開発者による貢献でした。Issueを調べ、担当者に紐付組織データを照合した結果、Javaにおけるコントリビューション開発のスポンサーとなった組織のチャートは以下のようになりました。

Java 24 では、修正済みとマークされた2,463 件のJIRA Issueのうち、1,657件はOracleの従業員が完了し、806件はJavaコミュニティの他のメンバーによる貢献でした。

Oracleは、Alibaba、Amazon、Google、IBM、Intel、ISCAS、Red Hat、Rivos、SAPなどの組織で働く開発者の顕著な貢献に感謝したいと思います。また、Ampere Computing、Bellsoft、JetBrains、NTT Dataなどの小規模な組織や、Java 24の修正の6%に貢献した独立系開発者の方々にも感謝します。
さらに、ビルドの品質に関して貴重なフィードバックを提供してくれたり、良質なバグ登録をしてくれたり、頻繁にアップデートを提供してくれたりした以下の方々に感謝したいと思います。
- Rafael Winterhalter (ByteBuddy)
- Marc Hoffmann (JaCoCo)
- Yoann Rodière (Hibernate projects)
- Robert Scholte (Apache Maven)
さらに、OpenJDK Quality Outreachプログラムを通じて、Java 24の早期アクセスビルドのテストに素晴らしいフィードバックを提供し、リリースの品質向上に貢献してくれた以下のFOSSプロジェクトと個人に感謝したいと思います。
Quality Outreach
https://wiki.openjdk.org/display/quality/Quality+Outreach
- Apache Ant (Jaikiran Pai)
- Apache Commons (Benedikt Ritter)
- Apache Derby (Rick Hillegas)
- Eclipse Jetty (Simone Bordet)
- Hibernate projects (Sanne Grinovero)
- RxJava (David Karnok)
Resources
Javaは、今日の技術トレンドにおいてNo.1のプログラミング言語であり続けています。 Java 23(訳注:原文ママ。おそらくJava 24と書きたかったに違いない)による予定通りの改善の提供が示すように、継続的な綿密な計画とエコシステムの関与を通じて、Javaプラットフォームは、モダンな開発とクラウドでの成長に向けて十分な態勢を整えています。
ニュースやアップデートの最新情報は、以下の方法で入手できます。
| Dev.java | Javaの知識を深め、コミュニティに参加するためのOracleの専用ポータルサイト |
| Inside.java | Oracle Javaチームによるニュースおよび意見を見るためのサイト |
| Inside.java Podcast | Java開発者向けのオーディオ・ショーで、OracleでJavaを作成している人が直接説明します。 |
| Duke’s Corner Podcast | Java コミュニティの著名人の個人的なストーリー、経験、専門知識を紹介するオーディオ・ショー |
| Java on YouTube | Javaの専門知識を深めるのに役立つ、OracleのJava関連動画コレクション |
| Inside.java Newscast | Inside.Javaポッドキャストをビデオ形式に拡張したビデオ番組 |
| JEP Café | 人気のあるJEP (JDK Enhancement Proposals) について説明するOracleの動画 |
| Sip of Java | あまり知られていないJava拡張機能の紹介を提供するOracleの1分間の短編動画 |
| OpenJDKメーリングリスト | お気に入りのOpenJDKプロジェクトの進捗状況を把握できるメーリングリスト |
| Xのフォロー @OpenJDK @Java | Javaの継続的な進化に関する最新情報とニュースを提供するソーシャルストリーム |
| Inside Java Newsletter | 主要なJava技術やコミュニティの最新情報をまとめたOracleが毎月発行するニュースレター |