Java 19が正式リリース。より軽量な仮想スレッド、RISC-Vへの移植など新機能。1年後のJava 21が次のLTS版に
Javaの新バージョン「Java 19」正式版がリリースされました。
Java 19 is now available! #Java19 #JDK19 #openjdk
— Java (@java) September 20, 2022
Download now: https://t.co/dKovWtNGrs
Release notes: https://t.co/EOyaGTLHrl
API Javadoc: https://t.co/ViIj9H4JrI
Features: https://t.co/XuEExSR7gs
Inside Java on JDK 19: https://t.co/q5WGZwxMzb pic.twitter.com/XYYA06ll0m
Javaは6カ月ごとに「フィーチャーリリース」と呼ばれるバージョンアップが行われ、そのなかの1つのバージョンが3年ごとに長期サポート(LTS:Long Term Support)版に指定されてきました。
現在のLTS版は2021年9月にリリースされたJava 17です。企業向けのシステム開発などで一定期間は安定したJavaのバージョンを使いたい場合にはLTS版のJava 17を、最新の機能をいちはやく利用したい場合には今回のJava 19を利用するのが適切でしょう。
参考:3年ぶりの長期サポート版となる「Java 17」正式版がリリース。M1 Macのサポート、Sealed Classの追加など
オラクルは、これまで3年ごとだったLTS版の登場の間隔を2年にすることを表明しています。そのため、次のLTS版は1年後に登場するJava 21になる予定です。
軽量な仮想スレッド、RISC-V版の登場、外部ライブラリの呼び出しなど
Java 19での注目の新機能は、プレビュー版として追加されたVirtual Threads(仮想スレッド:JEP 425)です。これまでJavaのスレッド機能は、JavaVMが実行されているOSが提供するスレッドと1対1対応していました。
Javaのサーバアプリケーションでは、リクエストごとにスレッドを立ち上げて並行処理を行う仕組みが実装されることも多く、その場合にはJavaによる多数のスレッド作成によってOS側でも多数のスレッドが作成され、OS上で多数のコンテキストスイッチングやメモリ消費が発生することになり、それが処理のオーバーヘッドになることがありました。
Virtual Threadは、OSによるスレッド生成に依存せず、JavaVMの中でJavaのスレッドを作成し管理できるようにしたものです。これまでよりも大幅に軽量なスレッド作成と管理が可能になり、スレッドを用いた多数の並行処理がさらに高速でスケーラブルなものになっています。
Linux/RISC-V版(JEP 422)もJava 19で登場しました。
プレビュー機能として追加されたForeign Function & Memory API(JEP 424)は、JNI(Java Native Interface)をより高性能で簡潔なAPIへと置き換える目的で開発された、Javaランタイムの外部にあるコードやデータとの相互運用性を実現するためのAPIです。
例えばTensorFlowのようなJava以外のプログラミング言語で開発されたライブラリなどをラップしてJavaから呼び出せるようにする場合などに役立ちます。
1年後のJava 21が次のLTS版に
オラクルはちょうど1年前に、LTS版の提供サイクルをそれまでの3年ごとから2年ごとに変更する提案を発表しました。
参考:Javaの長期サポート(LTS)版、次回は2年後に登場の見通し。オラクルがLTSのサイクルを3年から2年に変更提案
今回のJava 19の登場に当たり、この方針に変更がないかどうかを米オラクルのJavaプラットフォーム開発担当シニア・バイスプレジデント ジョージ・サーブ氏に確認したところ、この発表の通りオラクルが商用版として提供しているOracle JDKにおいて、LTSは2年サイクルとなり、次のLTS版は1年後のJava 21となる、との回答を得ました。
Javaへの影響度が極めて高いオラクルのLTS版サイクルが3年ごとではなく2年ごとでほぼ確定している点については、安定したJavaのバージョンで開発や運用を想定しているJavaデベロッパーにとって十分に留意すべき点だといえそうです。
あわせて読みたい
WebAssemblyランタイム「Wasmtime」がバージョン1.0に到達、本番利用に対応。Bytecode Allianceによる事実上の参照実装
≪前の記事
Chromeに実装された疑似クラス「:has()」がjQueryの「:has()」に悪影響、一定の条件下でWebサイトが壊れる可能性