JDK 27 Runtime Updates Release Notes

原文はこちら。
The original article was written by Billy Korando (Developer Advocate, Java Platform Group, Oracle).
https://inside.java/2026/09/12/jdk-27-runtime-updates/

JDKのリリースでは、言語やAPIの変更が注目されがちですが、JDK 27には、基盤となるランタイムに対する数多くの変更も含まれています。この記事では、JDK 27で導入される注目すべきランタイムの変更点をすべて解説します。

JDK 27 リリースで導入されるその他の変更点について詳しく知りたい場合は、主に開発者に影響を与えるすべての変更点を網羅したYouTube動画 Declassifying the Java 27 Release! をご覧ください。また、9月15日 15:00 UTC から Java YouTube チャンネルで配信されるJava 27 Launch Streamもぜひご覧ください。

JEP

JDK 27 リリースに含まれる9個のJEPのうち3個は、主にランタイムに影響を与えるか、あるいはシステム管理者がアプリケーションの健全性を監視するために使用されるものです。

523: Make G1 the Default Garbage Collector in All Environments

G1GCはJDK 9以降、事実上のデフォルトのガベージコレクタとなっています。しかし、利用可能なシステムリソースが限られている場合、代わりにSerial GCが使用されていました。その後のリリースでG1の改良が続けられたため、システムリソースが限られている場合でも、G1が依然として最適な選択肢となることが多くなっています。その結果、別のGCの使用を明示的に指定しない限り、すべてのケースでデフォルトのGCとしてG1GCを使用するようになりました。繰り返しになりますが、唯一の「最良のGC」というものは存在しません。各GCは、CPU使用率、メモリ使用率、ポーズ時間の間で一連のトレードオフを生じさせ、場合によってはGC内部の具体的な実装の詳細が、アプリケーションのKPIにプラスまたはマイナスの影響を与える可能性があります。したがって、最良の結果を得るためには、GCの選択と設定について常にテストと測定を行うようにしてください。

534: Compact Object Headers by Default

Compact Object Headersは、JDK 25で最終化された機能として導入され、JDK 27ではデフォルトで有効になります。つまり、これを使用するために-XX:+UseCompactObjectHeadersを指定する必要はなくなりました。Compact Object Headersはオブジェクトのメタデータのサイズを縮小し、これによりヒープ全体のサイズを約20%削減できると見込まれ、GCの負荷軽減など、下流工程にもいくつかの有益な効果をもたらします。Compact Object Headersは、-XX:-UseCompactObjectHeadersで無効にできます。

536: JFR In-Process Data Redaction

JFRは、JVM引数や環境変数として渡されたパスワードやAPIキーなどの機密情報を、デフォルトでマスキングするようになりました。また、*?をワイルドカードオプションとして使用した、大文字小文字を区別しないglobパターンを用いて、独自のフィルタを追加することもできます。追加のフィルタは、JVM引数用にはredact-arguments、環境変数およびシステムプロパティ用にはredact-key-XX:FlightRecorderOptionsのサブオプションとして追加できます。

例えば、環境プロパティのdburlをフィルタリングしたい場合は、次のコマンドで実現できます:

$ java -XX:FlightRecorderOptions:redact-key=dburl

フィルタが多数ある場合は、それらを別のファイルに定義し、そのファイルを参照することを検討してください:


$ java -XX:FlightRecorderOptions:redact-arguments=@args.txt


カスタムフィルタを定義する際、デフォルトのフィルタを含めるには、最初のフィルタの前に+を付けます:

$ java -XX:FlightRecorderOptions:redact-key=+dburl

noneを指定することで、デフォルトのフィルタを無効にできます:

$ java -XX:FlightRecorderOptions:redact-key=none

デフォルトのフィルタは、伏せ書きすべき機密データの最も一般的な例の多くを網羅しています:

デフォルトの redact-key フィルタ:

*api*key*
*auth*
*client*secret*
*credential*
*jaas*config*
*passphrase*
*passwd*
*password*
*private*key*
*pwd*
*secret*
*token*

デフォルトの redact-argument フィルタ:

*api*key*
*client*secret*
*credential*
*jaas*config*
*passphrase*
*passwd*
*password*
*private*key*
*pwd*
*secret*
*token*
*api*key*
*client*secret*
*credential*
*jaas*config*
*passphrase*
*passwd*
*password*
*private*key*
*pwd*
*secret*
*token*

Added Help for -XX:FlightRecorderOptions

この JEP に関連して、-XX:FlightRecorderOptionsに対するhelpコマンドが更新され、新しいredact-keyおよびredact-argumentsオプションを扱うようになりました。

jcmd Updates

jcmdコマンドライン・ツールに 3 つの新機能が追加されました。

Added Bash Autocompletion Script for jcmd Tool

$ source <JDK_HOME>/conf/bash-completion/jcmd

システム全体で利用可能にするには、スクリプトを /usr/share/bash-completion/completions/ ディレクトリに配置してください。

New jcmd Command VM.security_properties Displays Active Security Properties at Runtime

新しいコマンド VM.security_propertiesは、実行中の JVM プロセスに対する現在の Java セキュリティプロパティのセットを出力します。これは、システムプロパティ用の既存の VM.system_propertiesコマンドと同様です。この機能強化により、セキュリティ関連の設定の問題を診断およびトラブルシューティングするための、簡単でスクリプト化可能な方法が提供されます。

VM.info and hs_err_pid Logs Now Report Current Open File Descriptors

VM.infoコマンドの出力および HotSpot の致命的なエラーログ(hs_err_pid)には、実行中の Java プロセスの現在開かれているファイルディスクリプタの数が含まれるようになりました。サポートされているプラットフォームでは、新しい出力で SYSTEM セクションにアクティブなファイルディスクリプタの数が表示されます。

JVM Args Updates

このリリースでは、JVM 引数にいくつかの更新が行われました。

Removal of -noclassgc, -noverify, -verifyremote and -Xverify:none Options

いくつかの JVM 引数が削除されました。-noclassgc-noverify-verifyremote、および -Xverify:noneのこれらすべての引数は、以前から非推奨となっていたものです。

置き換え対象置き換え先
-noclassgc-Xnoclassgc
-verifyremote-Xverify:remote
-noverifyおよび-Xverify:none置き換えなし

Rename -XX:InitiatingHeapOccupancyPercent to -XX:G1IHOP

コマンドラインオプション-XX:InitiatingHeapOccupancyPercentは、G1GCでのみ使用されることを意図しているため、-XX:G1IHOPに名称が変更されました。旧オプションの-XX:InitiatingHeapOccupancyPercentは引き続き利用可能ですが、非推奨となっており、将来のリリースで削除される見込みですので、起動コマンドを適切に更新してください。

旧オプション新オプション備考
-XX:InitiatingHeapOccupancyPercent-XX:G1IHOP引き続き旧オプションを利用できるが非推奨

The UseCompressedClassPointers Option Is Now Obsolete

HotSpot JVM オプション-XX:[+|-]UseCompressedClassPointersは JDK 25 で非推奨となり、JDK 27 では廃止されました。JVM は現在、常に圧縮クラスポインタを使用します。このコマンドを使用すると、警告メッセージが表示されます。

オプション取り扱い
-XX:[+|-]UseCompressedClassPointersJDK 27で廃止
使用した場合警告メッセージ

Other Updates

特定のカテゴリには明確に分類できない、注目すべき更新がいくつかあります。

JSON format thread dump now generates thread identifiers, thread counts, and the process identifier as numbers

com.sun.management.HotSpotDiagnosticMXBean.dumpThreadsおよび$ jcmd Thread.dump_to_fileによって生成される JSON 形式のスレッドダンプでは、スレッド識別子、スレッド数、およびプロセス識別子の JSON 値が、文字列(例:{ 「tid」: 3, .. })ではなく数値として生成されるようになりました。JSON 形式のスレッドダンプを解析するプログラムでは、この変更に対応するために更新が必要になる場合があります。

この変更の一環として、threadDumpオブジェクトには、スレッドダンプ形式を表す新しいメンバ formatVersionが追加されました(値は 2)。これは、スレッドダンプ形式が進化するにつれて更新されます。

JFR Event jdk.OldObjectSample Disabled for Generational ZGC

JFR イベント jdk.OldObjectSample は、許容できないほどのパフォーマンスオーバーヘッドが生じるため、世代別 ZGC を使用する際には無効化されます。

The RuntimeMXBean.getInputArguments() Method Now Adds the -XX Prefix for Arguments From a Settings File

RuntimeMXBean.getInputArguments() は、設定ファイルを介して渡された引数に -XX: プレフィックスを追加するようになりました。以前は、設定ファイルからの引数は -XX: プレフィックスなしで返されていました(例:+UseZGC)。現在では、これらの引数は -XX: プレフィックス付きで返されます(例:-XX:+UseZGC)。

Removal of the JVM Compiler Interface (JVMCI)

このリリースでは、実験的な JVM コンパイラインターフェース(JVMCI)が削除されました。これらの変更には、HotSpot JVM からの JVMCI コードの削除、モジュール jdk.internal.vm.cijdk.graal.compiler、および jdk.graal.compile.management、JVMCI 固有の JIT コンパイルポリシー、機能選択フラグの設定、および文字列「JVMCI」を含むすべてのフラグと -XX:+UseGraalJITの削除が含まれます。

Remove SA support for printing MethodData and the printmdo command

Serviceability Agent のprintmdoコマンドが削除されました。printmdoclhsdbツールのサブコマンドであり、JVM 内部のコンパイラ情報であるMethodDataを表示するために使用されます。

Change the Default Values of MinHeapFreeRatio and MaxHeapFreeRatio for G1

G1 ガベージコレクタでは、オプション-XX:MinHeapFreeRatioのデフォルト値が 40 および 70 に、-XX:MaxHeapFreeRatioのデフォルト値が 0 および 100 に変更されました。その結果、G1 のヒープサイズ変更はデフォルトで事実上無効化されています。

以前のデフォルト値では、フルGCの後にヒープの拡張や縮小が引き起こされる可能性があり、特にSystem.gc()を頻繁に呼び出すアプリケーションにおいて、不要なヒープのサイズ変更が発生する恐れがありました。

-XX:MinHeapFreeRatioまたは-XX:MaxHeapFreeRatioを明示的に設定しているアプリケーションでは、指定された設定に基づいたヒープのサイズ変更動作が維持されます。

Conclusion

以上が、JDK 27における注目すべきランタイムの更新内容のすべてです。JDK 27の詳細については、開発者向けの変更点を網羅したYouTube動画 Declassifying the Java 27 Release!をご覧いただき、ぜひJava 27 Launch Streamもご覧ください。

References

コメントを残す

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