Javaのコンパクトオブジェクトヘッダーが製品機能に昇格

2025-05-22

JEP 519により、実験的な機能である「コンパクトオブジェクトヘッダー」がJavaの正式な製品機能に昇格しました。オブジェクトヘッダーレイアウトの最適化とパフォーマンス向上を目的としてJDK 24で導入され、OracleとAmazonで広範なテストを経て、その安定性とパフォーマンス向上が実証されました。有効化のための`-XX:+UnlockExperimentalVMOptions`オプションは不要になります。将来的には、より多くのオブジェクトヘッダービットが必要になった場合、Project ValhallaとLilliputがソリューションを提供します。

続きを読む
開発

AOTキャッシュプロファイルの改良によるJavaの高速起動

2025-05-11

この改良により、アプリケーションのトレーニング実行中にメソッド実行プロファイルを収集し、AOTキャッシュに保存することで、Javaアプリケーションのウォームアップ時間が大幅に短縮されます。本番環境での起動時、JITコンパイラはこれらのプロファイルを使用してネイティブコードを即座に生成できるため、プロファイルの収集を待つ必要がなくなり、起動とピークパフォーマンスが高速化されます。この手法はコードの変更を必要とせず、既存のAOTキャッシュ作成コマンドと互換性があります。実験では、単純なサンプルプログラムのウォームアップ時間が19%短縮されました。

続きを読む

Javaがfinalフィールドの不変性を強化する

2025-03-31

Javaプログラムの安全性を高め、パフォーマンスを向上させるため、JDKはfinalフィールドの不変性を強化する予定です。現在、ディープリフレクションによってfinalフィールドを変更できますが、これはfinalキーワード本来の意図に反し、JVMの最適化を制限します。将来のリリースでは、デフォルトでディープリフレクションによるfinalフィールドの変更を禁止し、警告を発します。開発者は`--enable-final-field-mutation`オプションを使用して、finalフィールドの変更を選択的に有効にできますが、できる限り避けることをお勧めします。この変更は、Javaの「デフォルトでのセキュリティ」機能を向上させ、レコードクラスの設計と整合性を保つことを目的としています。

続きを読む

Java JEP 483: 事前クラスローディングとリンクによる起動時間の大幅短縮

2024-12-22

JEP 483は、HotSpot JVMの起動時にアプリケーションクラスを事前にロードおよびリンクすることにより、Javaアプリケーションの起動時間を大幅に短縮します。これは、アプリケーションの単一実行を監視し、すべてのクラスのロード済みおよびリンク済みフォームをキャッシュに格納して、後続の実行で再利用することによって実現されます。この機能はコードの変更を必要とせず、Spring PetClinicなど、大規模なサーバーアプリケーションで大幅な速度向上をもたらします(起動時間が42%短縮)。現在は2段階のプロセスですが、将来のバージョンではキャッシュ作成が1段階に簡素化され、より柔軟なトレーニング実行設定が可能になります。

続きを読む
開発