「Java 21」正式リリース。仮想スレッドが正式版に、入門者向けに「void main」と簡潔な記述、世代的ZGCなど新機能
オラクルはJavaの最新バージョン「Java 21」正式版を今日リリースします。
Java 21は長期でセキュリティパッチやバグフィクスなどが提供されるLTS(Long Term Support:長期サポート)版です。企業向けのシステム開発などで安定したJavaのバージョンをある程度長期間使いたい場合には、このJava 21は有力な候補となるでしょう。
日本時間22時からJava 21のローンチイベントも開催予定です。「with a few surprise reveals」(いくつかサプライズ発表があるよ)というのが少し気になります。今年は昨年復活したJavaOneがないので、その代わりに何かあるのでしょうか。
We're just 1 day away from our #Java21 launch live stream! Join us tomorrow as we'll have experts share details around the latest release, with a few surprise reveals and guests along the way.
— Java (@java) September 18, 2023
Details on how to join: https://t.co/fUyizPAT2T pic.twitter.com/XBUDSCbeL4
Java 21からLTSが2年間隔に
Javaは6カ月ごとに「フィーチャーリリース」と呼ばれるバージョンアップが行われ、そのなかの1つのバージョンが3年ごとに長期サポート(LTS:Long Term Support)版に指定されてきました。
この3年のLTSの間隔は、今回リリースされたJava 21から2年に改められます。今後は2年ごとにJavaのLTS版が登場することになります。
このLTSの方針は、オラクルが提供する商用のJavaディストリビューションであるOracle JDKにおける方針であり、他のJavaディストリビューションについてのLTS版提供の方針は、それぞれのディストリビューションベンダが決定します。
しかし、おそらく他のJavaディストリビューションベンダも同様の方針になるでしょう。
仮想スレッドが正式版になど、Java 21の主な新機能
Java 21はLTS版として、これまでプレビュー版だった多くの機能が正式版となりました。
仮想スレッドが正式版に
Java 21では、これまでプレビュー版であったVirtual Threads(JEP 444: Virtual Threads)が正式版になります。
Virtual ThreadはOSによるスレッド生成に依存せず、JavaVMの中でJavaのスレッドを作成し管理できるようにしたものです。OSのスレッド生成で発生する多数のコンテキストスイッチングやメモリ消費がなくなるため、Javaでのスレッドを用いた多数の並行処理が高速でスケーラブルなものになります。
すでに代表的なJavaのフレームワークであるSpring FrameworkがJava 21の仮想スレッドへの対応を発表しているなど、広く使われる機能になりそうです。
参考:Spring Framework 6.1が仮想スレッドに対応へ、9月登場予定のJava 21にも対応予定
より高速な世代的ZGCが正式版に
Java 15で採用されたスケーラブルかつ低レイテンシなガベージコレクタのZGCをさらに改良した世代的ZGC(JEP 439: Generational ZGC)が正式版となりました。
ジェネレーショナルZGCでは、若いオブジェクトと古いオブジェクトの世代を分けて管理することで、アプリケーションのパフォーマンスを向上させる仕組みを備えています。
これによりヒープメモリの低減、ガベージコレクション時のCPUオーバーヘッドの低減などが実現され、一時停止時間は1ミリ秒未満、数百メガバイトから数テラバイトまでのヒープサイズのサポート、最小限の手動設定などの利点が得られるとされています。
入門者向けの簡潔なコード記述が可能に
プレビューとして追加される新機能「JEP 445: Unnamed Classes and Instance Main Methods」では、これまで「public static void main(String[] args)」といった複雑な記述が必要だった部分が「void main()」のように簡潔に記述できるようになります。
これはJavaを学ぼうとする人たちに対して、プログラムを簡潔に書けるようにすることでスムーズな学習を可能にするとともに、スキルの成長に合わせて正確なコードが記述できるようにすることを目的としています。
具体的には、これまでHello, Worldの記述には下記のようなコードを書いていました。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
これが下記のように簡潔に書けるようになります。
void main() {
System.out.println("Hello Java");
}
さらに、「JEP 440: Record Patterns」は、instanceofやswitchによるパターンマッチングが拡張され、Recordクラスを分解して値を抽出できるようにする機能が正式版となります。
「JEP 441: Pattern Matching for switch」は、文字通りSwitchのなかでパターンマッチングを使えるようにするもの。これも正式版になりました。
「JEP 449: Deprecate the Windows 32-bit x86 Port for Removal」で、Windows 32ビットx86版がなくなりました。
そのほか多くの新機能についてはOpenJDK 21のページをご覧ください。
あわせて読みたい
Armが米NASDAQ市場に上場。NVIDIAへの売却断念を経て、約9兆6000億円と今年最大規模に
≪前の記事
ノーコードでCSVファイルからPDF帳票を出力。複雑なレイアウトでもExcelでユーザー自身が作成、カスタマイズ可能[PR]