Java 24 / JDK 24 リリース(GA)
(jdk.java.net)- Oracleが Java 24(JDK 24) のリリースを正式発表
- JDK 24は、JCPのJSR 399で定義されたJava SE Platformバージョン24の基準実装であり、JDKリリース・プロセス(JEP 3) を通じてリリースされた
[JEP別まとめ]
-
JEP 404: Generational Shenandoah(実験的)
- Shenandoah GCで世代別収集をサポートし、性能を改善
-
JEP 450: Compact Object Headers(実験的)
- HotSpot JVMでオブジェクトヘッダーのサイズを 96〜128ビットから64ビット に削減
- ヒープサイズの削減、デプロイ密度の向上、データ局所性の改善が期待される
-
JEP 472: Prepare to Restrict the Use of JNI
- JNI(Java Native Interface) の使用時に警告を追加
- Foreign Function & Memory(FFM)APIでも一貫した警告を提供
- 将来のJNIおよびFFM APIの利用制限に備えて警告を提供
- アプリケーションで必要な場合は、インターフェースを選択的に有効化可能
-
JEP 475: Late Barrier Expansion for G1
- G1ガベージコレクタのBarrier実装を簡素化
- C2 JITコンパイラの初期段階から後半段階へとBarrier展開のタイミングを調整
-
JEP 478: Key Derivation Function API(プレビュー)
- 暗号鍵導出機能を提供する Key Derivation Function(KDF) APIを導入
- 秘密鍵やその他のデータから追加の鍵を導出可能
-
JEP 483: Ahead-of-Time Class Loading & Linking
- HotSpot JVM起動時にアプリケーションクラスを即座に利用可能
- 一度の実行でロードおよびリンクされた状態をキャッシュに保存し、以後の実行で高速起動が可能
-
JEP 484: Class-File API
- Javaクラスファイルの 解析、生成、変換 のための標準APIを提供
-
JEP 485: Stream Gatherers
- Stream APIでユーザー定義の中間操作をサポート
- 既存の中間操作では難しいデータ変換が可能
-
JEP 486: Permanently Disable the Security Manager
- セキュリティマネージャはクライアント側コードの主要なセキュリティ手段ではなかった
- Java 17(JEP 411)で削除予定とされ、無効化措置が取られた
- セキュリティマネージャAPIは今後のリリースで完全に削除される予定
-
JEP 487: Scoped Values(第4プレビュー)
- スレッド内の不変データを子スレッドと共有する Scoped Values を導入
- スレッドローカル変数よりもメモリおよび時間コストを削減可能
- 仮想スレッドや構造化並行性と組み合わせることで性能向上が期待される
-
JEP 488: Primitive Types in Patterns, instanceof, and switch(第2プレビュー)
- パターンマッチングでプリミティブ型をサポート
instanceofおよびswitchで全てのプリミティブ型を使用可能
-
JEP 489: Vector API(第9インキュベーター)
- ベクトル演算のためのAPIを導入
- ベクトル命令にコンパイルされ、スカラー演算より高い性能が期待される
-
JEP 490: ZGC: Remove the Non-Generational Mode
- ZGCの非世代モードを削除し、世代モードをデフォルトに設定
-
JEP 491: Synchronize Virtual Threads without Pinning
synchronized構文で仮想スレッドがプラットフォームスレッドを解放できるよう改善- 仮想スレッドがプラットフォームスレッドに固定されないようにし、性能と拡張性を改善
-
JEP 492: Flexible Constructor Bodies(第3プレビュー)
- 明示的なコンストラクタ呼び出し(
super(..)、this(..))の前に文を記述可能 - インスタンスが完全に初期化される前にフィールドを初期化可能
- 明示的なコンストラクタ呼び出し(
-
JEP 494: Module Import Declarations(第2プレビュー)
- モジュールがエクスポートしたパッケージを簡単にインポートできる宣言を追加
- モジュール化ライブラリの再利用を簡素化
-
JEP 495: Simple Source Files and Instance Main Methods(第4プレビュー)
- 初心者でも簡単に書けるシンプルなソースファイルとメソッドをサポート
- 複雑なコードなしで簡単なプログラムを作成可能
-
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
- 耐量子 Module-Lattice-Based Key Encapsulation Mechanism(ML-KEM) を導入
- 対称鍵セキュリティを強化し、量子コンピューティング攻撃に備える
-
JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
- 耐量子 Module-Lattice-Based Digital Signature Algorithm(ML-DSA) を導入
- データ改ざん防止と署名者認証を強化
- 将来の量子コンピューティング攻撃に対応
-
JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
sun.misc.Unsafeのメモリアクセスメソッド使用時に警告を表示- VarHandle APIおよびFFM APIへの移行を推奨
-
JEP 499: Structured Concurrency(第4プレビュー)
- 関連するタスク群を単一の作業単位として扱う構造化並行性を導入
- エラー処理とキャンセルを簡素化し、信頼性と可視性を改善
[JDK 24の新機能まとめ]
-
Configurable New Session Tickets Count for TLSv1.3
- 新しいシステムプロパティ
jdk.tls.server.newSessionTicketを追加 - JSSEサーバーで TLSv1.3再開チケット数 を設定可能(0〜10の範囲)
- デフォルト値は 1 に設定
- コマンド例:
java -Djdk.tls.server.newSessionTicket=2
- 新しいシステムプロパティ
-
Mechanism to Disable TLS Cipher Suites by Pattern Matching
java.security設定ファイルでjdk.tls.disabledAlgorithmsプロパティを通じて TLS暗号スイートを無効化可能- パターンマッチングをサポート(
_ワイルドカード使用可能) - 例:
"TLS_RSA_*"はTLS_RSAで始まるすべての暗号スイートを無効化
-
New Option to Extract a JAR File to a Specific Directory Using the jar Tool
jarツールに新しい--dirおよび-Cオプションを追加- 特定ディレクトリにJARファイルの内容を展開可能
- 例:
jar -xf foo.jar -C /tmp/bar/ jar --extract --file foo.jar --dir /tmp/bar/
-
New Reader.of(CharSequence) Method
- 新しい静的ファクトリメソッド
java.io.Reader.of(CharSequence)を追加 String、StringBuilderなどから効率的に読み取り可能
- 新しい静的ファクトリメソッド
-
New Method Process.waitFor(Duration)
java.lang.Process#waitFor(Duration)メソッドを追加- 既存の
waitFor()で単位設定が分かりにくい問題を防止
-
Support for Unicode 16.0
- Unicode 16.0のサポートを追加
- 合計 154,998文字 と 7つの新規スクリプト を追加
- Garay(西アフリカ)
- Gurung Khema、Kirat Rai、Ol Onal、Sunuwar(インドおよびネパール)
- Todhri(アルバニア)
- Tulu-Tigalari(インド南西部)
-
New JAR Command Option to Not Overwrite Existing Files
jarツールに--keep-old-filesおよび-kオプションを追加- 既存ファイルの上書きを防止可能
- 例:
jar xkf foo.jar jar --extract --keep-old-files --file foo.jar
-
New MXBean to Monitor and Manage Virtual Thread Scheduler
jdk.management.VirtualThreadSchedulerMXBeanインターフェースを追加- 仮想スレッドスケジューラの状態と並列処理を監視可能
- スケジューラの目標並列度を動的に変更可能
-
New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers
jcmdツールに新しいコマンドを追加Thread.vthread_scheduler: スレッドスケジューラの状態を出力Thread.vthread_pollers: I/Oポーラーの状態を出力
-
Support for Including Security Properties Files
java.security設定ファイルで他のプロパティファイルを取り込み可能include <ファイルパス>を使用includeキーワードはプロパティ名としては使用不可
-
Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature
- RSASSA-PSS署名で使用できる標準ハッシュおよびメッセージ生成関数を文書化
-
SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism
- SunPKCS11プロバイダで AES/CTS変換 のサポートを追加
- 新しい設定プロパティ
cipherTextStealingVariantを追加(CS1、CS2、CS3) - NSSではデフォルト値はCS1に設定
-
New Summary Page for External Specifications
- Java SEおよびJDK APIが参照する外部仕様を一覧できるサマリーページを追加
-
jpackage Supports WiX Toolset v4 and v5 on Windows
jpackageでWiX Toolset v4およびv5 のサポートを追加- 最新のインストール済みバージョンを自動選択
- WiX v3形式のカスタムソースをv4形式へ自動変換
-
Add W3C DTDs and XSDs to the JDK Built-in Catalog
- JDK内蔵XMLカタログにW3CのDTDおよびXSDを追加
- ネットワークなしでローカル読み込みが可能
- 追加された項目:
- xml名前空間
- XML Schema Part 1 & 2
- XHTML 1.0 & 1.1
- W3C XML仕様DTD
4件のコメント
Project Valhalla は本当に長い間開発が続いているので、良い成果につながってほしいですね。
個人的には、value class のフラットな構造によってポインタ参照が減り、メモリアクセス速度の面でメリットが生まれる部分に大きく期待しています。
Kotlinの(良い意味での)影響をかなり受けていますね。最近はKotlin言語を使っていて本当に満足していますが、その源流とも言えるJavaも応援しています。
Structured Concurrency と Scoped Value にはとても大きな期待を寄せています。
Hacker Newsの意見
SecurityManagerがひっそりと消えた。以前、Javaの選択科目を教えていた教授はSecurityManagerの利点をよく強調していた。当時はかなり懐疑的だったが、今ではその懐疑が正しかったと証明されて満足している
構造化並行性のプレビューを終わらせてほしい。これは、Javaがgolangと比べて並行プログラミングのしやすさにおける最後の差を縮めるのに役立つ。Goはチャネルとwait groupsを簡単に作れる。構造化並行性は、こうした基本要素を使って、より高水準の作業を簡単に書いて理解できるようにする
仮想スレッドのピン留めがなくなったのは大きな利点だ。これでほぼ制限なく仮想スレッドを使える
Streamsが今でも愛されているのを見るのはうれしい。会社でfizzbuzzスタイルの面接をよく行うが、Javaを選んでストリームを使う人はたいてい通過する。これは、この言語の使いやすさと直感性、そして抽象化の力を示している。JavaのストリームはRubyの関数型スタイルの演算チェーンと同じくらい強力だが、実際に性能も良い
新機能: OpenJDK 24プロジェクトのリンク
ARM32とRisc-Vのリリースはまもなくこちらで確認できる
Raspberry 2とVision Five 2は、OracleとOpenJDKが無視している非常に先進的なハードウェアだ
OpenJDKと公式Oracle JDKリリースの利用におけるライセンスの違いについての質問
JEP 491がまだ言及されていないのは驚きだ。これは、
synchronizedキーワードが仮想スレッドを台無しにしないことを保証する。既存コードを仮想スレッド上で実行するうえで大きな利点だJavaのバージョンの進化はここ数年興味深かった。Java 9、10、11 LTSを経て、それでもまだJava 8を使っている。やることが多すぎる
最新版のJavaとKotlinを比べると、Javaは改善を続けてKotlinの機能を取り込んでいるが、Kotlinも独自に改善を続けている
GraalVMもJava 24で利用できる。多くの優れた機能がある
仮想スレッドのピン留めがついに解消された