第3章 Red Hat build of OpenJDK の機能
最新の Red Hat build of OpenJDK 21 リリースには、新機能が含まれる可能性があります。さらに、最新リリースは、以前の Red Hat build of OpenJDK 21 リリースに由来する機能を強化、非推奨、または削除する可能性があります。
その他の変更点やセキュリティー修正は、OpenJDK 21.0.3 Released を参照してください。
Red Hat build of OpenJDK の機能強化
Red Hat build of OpenJDK 21 では、以前のリリースの Red Hat build of OpenJDK で作成された機能に拡張が行われました。
Java コンパイラーは、レコードパターンの final
キーワードを拒否することにより、Java 言語仕様に準拠しています。
Java 21 リリースでは、switch ステートメントのパターン一致で Java 言語が強化されました。ただし、Red Hat build of OpenJDK 21 では、レコードパターンの前に final
キーワードを使用できる javac
コンパイラーが提供されています (例: case final R(…) ->
)。final
キーワードの使用は Java 言語仕様に違反しています。
Red Hat build of OpenJDK 21.0.3 では、javac
コンパイラーは Java 言語仕様に合わせて調整されています。この機能強化は、switch ステートメントに final
キーワードを含むプログラムがコンパイルに失敗することを意味します。このような状況では、プログラムが正常にコンパイルされるようにするには、final
キーワードを削除する必要があります。
JDK-8317300 (JDK Bug System) を参照してください。
XML Security for Java が Apache Santuario 3.0.3 に更新
Red Hat build of OpenJDK 21.0.3 では、XML 署名の実装は Apache Santuario 3.0.3 に基づいています。
この機能強化により、次の 4 つの SHA3 ベースの RSA-MGF1 SignatureMethod
アルゴリズムが導入されました。
-
SHA3_224_RSA_MGF1
-
SHA3_256_RSA_MGF1
-
SHA3_384_RSA_MGF1
-
SHA3_512_RSA_MGF1
更新リリースで javax.xml.crypto.dsig.SignatureMethod
API を変更して新しいアルゴリズムに定数値を提供するため、これらのアルゴリズムには次の同等の文字列リテラル値を使用します。
-
http://www.w3.org/2007/05/xmldsig-more#sha3-224-rsa-MGF1
-
http://www.w3.org/2007/05/xmldsig-more#sha3-256-rsa-MGF1
-
http://www.w3.org/2007/05/xmldsig-more#sha3-384-rsa-MGF1
-
http://www.w3.org/2007/05/xmldsig-more#sha3-512-rsa-MGF1
JDK-8319124 (JDK Bug System) を参照してください。
製品スイッチとして利用できる TrimNativeHeapInterval
オプション
Red Hat build of OpenJDK 21.0.3 では、公式の製品スイッチとして -XX:TrimNativeHeapInterval=ms
オプションが提供されます。この機能強化により、JVM はサポートされているプラットフォーム上で指定された間隔 (ミリ秒単位) でネイティブヒープをトリミングできるようになります。現在、この機能強化がサポートされているプラットフォームは、glibc
を搭載した Linux のみです。
TrimNativeHeapInterval=0
を設定するとトリミングを無効にすることができます。トリミング機能はデフォルトで無効になっています。
JDK-8325496 (JDK Bug System) を参照してください。
SystemTray.isSupported()
メソッドが、ほとんどの Linux デスクトップで false
を返す
Red Hat build of OpenJDK 21.0.3 では、SystemTray
API を正しくサポートしていないシステムで、java.awt.SystemTray.isSupported()
メソッドが false
を返します。この機能拡張は、SystemTray
API 仕様に準拠しています。
SystemTray
API は、システムデスクトップのタスクバーと対話して通知を提供します。SystemTray
には、アプリケーションを表すアイコンが含まれている場合もあります。基盤となるプラットフォームの問題により、タスクバーアイコンの GNOME デスクトップサポートが数年間正しく機能しませんでした。このプラットフォームの問題は、GNOME デスクトップで SystemTray
サポートを提供する JDK の機能に影響します。この問題は通常、GNOME Shell 44 以前を使用するシステムに影響します。
一部のシステムでは、SystemTray
の正しいサポートが不足していることが長年の問題となっているため、影響を受けるシステムで false
を返すこの API 強化は、ユーザーへの影響を最小限に抑えられると考えられます。
JDK-8322750 (JDK Bug System) を参照してください。
Certainly R1 と E1 ルート証明書が追加される
Red Hat build of OpenJDK 21.0.3 では、cacerts
トラストストアに 2 つの Certainly ルート証明書が含まれています。
- 証明書 1
- 名前: Certainly
- エイリアス名: certainlyrootr1
- 識別名: CN=Certainly Root R1、O=Certainly、C=US
- 証明書 2
- 名前: Certainly
- エイリアス名: certainlyroote1
- 識別名: CN=Certainly Root E1、O=Certainly、C=US
JDK-8321408 (JDK Bug System) を参照してください。
若いコレクションルートの大規模オブジェクト配列の正確な並列スキャン
若い世代のオブジェクトの収集中に、Parallel Garbage Collector (GC) は、古い世代のオブジェクトを 64 kB のストライプに分割し、若い世代への参照をスキャンします。これらのストライプはワーカースレッドに割り当てられ、並列でスキャンを実行します。
Red Hat build of OpenJDK 21 の以前のリリースでは、ワーカースレッドが独自のストライプに制限されていませんでした。この制約の欠如により、並列処理に制限が課せられました。たとえば、大きなオブジェクトが特定のワーカースレッドに割り当てられたストライプで開始した場合、このスレッドは複数のストライプにわたって何千もの参照を持つオブジェクトをスキャンすることになる可能性があります。
Red Hat build of OpenJDK 21.0.3 は、各ワーカースレッドを割り当てたストライプに制限します。各スレッドは、大きなオブジェクト配列の重要な部分のみを処理するようになりました。大きなオブジェクト配列が存在する場合、Parallel GC の一時停止は、Garbage-First (G1) コレクターの一時停止と同様になります。場合によっては、この機能強化により一時停止の長さが 75-80% 短縮されます。たとえば、以前のリリースでは 100 ミリ秒の一時停止でしたが、このリリースでは 20 ミリ秒の一時停止に短縮されます。
JDK-8310031 (JDK Bug System) を参照してください。
ZGC およびデフォルト以外の ObjectAlignmentInBytes 値を使用した場合の潜在的な JVM の障害を修正
Red Hat build of OpenJDK 21 の以前のリリースでは、-XX:+UseZGC
オプションおよび -XX:ObjectAlignmentInBytes
のデフォルト以外の値を指定して JVM を実行すると、JVM の失敗や誤作動につながる場合がありました。この問題は、ZBarrierSet::clone_obj_array
がオブジェクト配列の末尾のパディングを無視したために発生しました。
Red Hat build of OpenJDK 21.0.3 ではこの問題が解決され、JVM の実行時に Z Garbage Collector (ZGC) と Java オブジェクトアライメントのデフォルト以外の値を使用する場合でも、JVM を正常に実行できるようになりました。
JDK-8325074 (JDK Bug System) を参照してください。