おそらくJavaの最新バージョンをすぐに使う現場や開発会社は日本だとほとんどないのかなとは思います。
ですが一応LTSと呼ばれる長期サポートを行うバージョンのリリースということもありこちらを自分用にまとめておきたいと思いブログにしました。
ちなみにLTSバージョンは現状8/11/17/21が対象となっておりLTSバージョンはおよそ8年はサポートをする想定となっています。
また今後のサポートのロードマップについては下記を参照していただけると幸いです。
https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html
Java 25 新機能まとめ
- 概要:Java 21 以来の LTS
- 言語機能の強化
- パフォーマンス・JVM 改善
- 新 API・ライブラリ
- プレビュー機能
- 非推奨・削除された機能
概要
Java 25 は Java 21 以来の LTS(長期サポート)リリースで、Oracleは最低8年のサポートを約束しています。18本のJEPを含み、言語の表現力向上、JVMパフォーマンス改善、AI時代に向けたAPIの充実が特徴です。
言語機能の強化
コンパクトソースファイル&インスタンスmainメソッド
JEP 512 — 正式化
入門者が public static void main なしで Hello World を書けるようになります。クラス宣言やアクセス修飾子も省略可能で、学習コストを大幅に削減。
void main() {
System.out.println("Hello, Java 25!");
}
モジュールインポート宣言
JEP 511 — 正式化
モジュールがエクスポートする全パッケージを一括インポートできます。import module java.base; だけで java.lang、java.util など多数のクラスが使用可能に。
import module java.base;
import module java.desktop;
void main() {
var list = List.of("Java", "25");
}
フレキシブルコンストラクタボディ
JEP 513 — 正式化
super() や this() を呼び出す前に、フィールドの初期化や引数のバリデーションを記述できるようになります。コンストラクタの柔軟性が大幅に向上。
class Point {
int x, y;
Point(int x, int y) {
if (x < 0 || y < 0) throw new IllegalArgumentException();
super(); // 引数検証後に super() 呼び出し可能
this.x = x; this.y = y;
}
}
新 API・ライブラリ
スコープ値 (Scoped Values)
JEP 506 — 正式化
ThreadLocal の現代的な代替手段。仮想スレッドと相性がよく、スレッド間で不変データを安全かつ効率的に共有できます。読み取り専用・スコープが明確・メモリ効率が高い。
final static ScopedValue<String> USER = ScopedValue.newInstance();
ScopedValue.where(USER, "Alice").run(() -> {
System.out.println(USER.get()); // "Alice"
});
鍵導出関数 (KDF) API
JEP 510
HKDF・PBKDF2などの鍵導出関数への標準APIが追加。暗号化キーをパスワードや共有秘密から安全に導出するための現代的なサポートが標準ライブラリに入りました。
JFRコーポラティブサンプリング / メソッドタイミング
JEP 518 / JEP 520
JFR(Java Flight Recorder)が強化され、協調型サンプリングとメソッド単位のタイミング計測が可能に。バイトコード計装による詳細なプロファイリングがアプリレベルで利用可能。
プレビュー機能
PEMエンコーディング
JEP 470 — 1st プレビュー
PEM形式(証明書・秘密鍵などで広く使われる形式)の読み書きをサポートするAPIが追加されます。OpenSSLやTLS設定との相互運用が格段に容易に。
安定値 (Stable Values)
JEP 502 — 1st プレビュー
アプリケーション生涯に一度だけ設定できる変数。遅延初期化の標準的・安全な実装を提供し、JVMが final フィールド同様に最適化できるようになります。ダブルチェックロッキング不要。
プリミティブ型のパターンマッチング
JEP 507 — 3rd プレビュー
instanceof や switch で int、long、double などプリミティブ型を直接パターンマッチできます。ボクシング不要でシンプルな記述が可能に。
switch (obj) {
case int i -> "整数: " + i;
case double d -> "実数: " + d;
case String s -> "文字列: " + s;
}
構造化並行処理 (Structured Concurrency)
JEP 505 — 5th プレビュー
複数の並行タスクを一つの作業単位として扱うAPIで、エラー処理・キャンセルをシンプルに記述可能。仮想スレッドとの組み合わせで真価を発揮します。
非推奨・削除
削除:32ビット x86 ポート (JEP 503)
32ビット x86 向けのすべてのビルドサポートが削除されました。32ビット OpenJDK バイナリは Java 25 以降提供されません。64ビット環境への移行が必須です。32ビット環境を使い続ける場合は Zero JVM が選択肢になります。
削除:実験的 Graal JIT コンパイラ
オプションの実験的 Graal JIT コンパイラが JDK 25 から削除されました。GraalVM ディストリビューション経由での利用は引き続き可能です。
非推奨:Object.finalize() / ファイナライゼーション
以前から非推奨だったファイナライゼーション機能が、将来の削除に向けて引き続き警告対象です。Cleaner や AutoCloseable (try-with-resources) への移行を推奨。
非推奨:SecurityManager(継続)
Security Manager は Java 17 から非推奨で、将来削除される予定です。アクセス制御の代替手段としては利用できません。
Java 26 予定削除:Applet API (JEP 504)
Java 17 で非推奨となった Applet API は、Java 26 での削除が予定されています(Java 25 では削除対象外)。ブラウザプラグインは既に全主要ブラウザで非対応です。
パフォーマンス・JVM 改善
AOTコマンドライン エルゴノミクス
JEP 514
AoTクラスキャッシュの生成を一つのフラグで行えます。トレーニングとキャッシュ生成を1回の起動にまとめ、クラウド・マイクロサービス環境でのコールドスタートを大幅に短縮。
AOTメソッドプロファイリング
JEP 515
前回実行時のメソッドプロファイルを起動時から即座に利用可能にし、JITコンパイラがネイティブコードを素早く生成できます。サーバーレスや短命なJVMプロセスに特に有効。
コンパクトオブジェクトヘッダ
JEP 519 — 実験的
JVMオブジェクトのヘッダサイズを96〜128ビットから64ビットに削減。ヒープ使用量を10〜20%程度削減できる可能性があり、メモリ集約的なアプリに恩恵。
ジェネレーショナル Shenandoah GC
JEP 521 — 実験的
Shenandoah GCに世代別GC機能を追加。短命オブジェクトと長寿命オブジェクトを分けて管理することでGCオーバーヘッドを削減し、スループット向上を狙います。
まとめ
Java 25 は LTS としての安定性と、Java 21 以降に積み重なった革新を一気に取り込んだリリースです。特にコンパクトソースファイル・スコープ値・AOT改善は実用的なインパクトが大きく、アップグレードの価値は十分あるそんなバージョンかと思えます。
ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。
- 選考ではありません
- 履歴書不要
- 技術の話が中心
- 所要時間30分程度
- オンラインOK