OracleがJavaの最新バージョン19をリリース
米Oracle社が2022年9月20日、Javaの最新バージョン版「Java 19」を発表しました。同時にJavaの開発キット「JDK 19」も提供が開始されました。
これまではJava 18・JDK 18が最新でしたが、半年ごとの「フィーチャーリリース」によってJava 19・JDK 19が最新バージョンとなります。
今回のJava 19では、プラットフォーム機能の強化・パフォーマンスと安定性・セキュリティ面など、多くの改良が加えられている点が注目されます。Javaはフィーチャーリリースの中の1つがLTS(Long Term Support)版に指定され、3年間の長期サポートが保証される仕組みです。
現在のLTS版は2021年9月リリースのJava 17※ですが、LTSの間隔が3年から2年に短縮されたことで、次に登場するLTS版は2023年9月リリース予定の「Java 21」となります。
Java 19のサポート期間は「Java 20」公開予定の2023年3月までで、それまでの間に2回程度のメンテナンスアップデートが予定されています。また、LTSのJava8が2022年3月に公開アップデートを終了※していますが、今後も順次サポートが終了していきますので、常に確認が必要です。
この記事では、Java 19リリースに関するニュース、Java 19の新機能概要、新機能の詳細について紹介をしていきます。Javaを学んでいる方、Javaに興味がある方、実際にJavaを利用している方はぜひ参考にしてみてください。
【参考】:Oracle Releases Java 17 【参考】:オラクル、Java 19をリリース 【参考】:※Oracle Java SE Supportロードマップ | Oracle 日本
Java 19の新機能概要
Javaでは、新たな技術仕様や改訂仕様はJSR(Java Specification Request) として提案され、採用されたものがJEP (JDK Enhancement-Proposal) として管理されます。
今回JDK 19に採用されたJEPは以下の7件があり、2023年9月にLTSとしてリリース予定のJava 21に向けて、さまざまなテストが進められていきます。
7つの機能には「レコードパターン」、オープンソースの「Linux/RISC-V命令セットアーキテクチャ(ISA)サポート」「外部関数とメモリAPIのプレビュー」「仮想スレッド」「ベクトル演算API」「外部関数とメモリAPIのプレビュー」「構造化並行処理」があります。
Linux/RISC-V機能以外の機能は、プレビューまたはインキュベータフェーズにあります。実際にJava 19をインストールして試してみたい方は、以下のJavaダウンロード※サイトを利用してください。
【参考】:※Java ダウンロード | Oracle 日本 【参考】:The Arrival of Java 19| Java 19の技術ブログ
Java 19の7つの新機能詳細
今回発表されたJava 19の7つの新機能詳細について、以下解説をしていきます。これらの多くはプレビューやインキュベーション中の機能ですが、Java 21に向けてテストが繰り返され、ブラッシュアップされていく予定です。
※プレビュー機能とあるものは、実装は完了していいますが、一時的となる可能性がある新機能のことで、将来的なJDKリリースでは別の形式となるか、完全になくなっている可能性があるものを意味しています。
また、Java 18からデフォルトの文字コードが、従来のUTF-16からUTF-8になっていますが、Java 19でもそれは踏襲されています。
【参考】:JDK 19 Release Notes
レコードパターンのプレビュー「JEP 405:Record Patterns (Preview)」
レコードの値を分解するレコードパターンで、Javaプログラミング言語を強化します。レコード型とタイプ型のネストにより、強力で宣言的、かつ複合的なデータナビゲーションと処理を可能にします。本機能はプレビュー機能です。
【参考】:JEP 405: Record Patterns(Preview)
Linux/RISC-V命令セットアーキテクチャ(ISA)サポート「JEP 422:Linux/RISC-V Port」
オープンソースの命令セット・アーキテクチャ (ISA) である、Linux/RISC-V に対応します。これにより、RISC-VアーキテクチャにおいてJavaの活用が進むことが期待されます。
【参考】:JEP 422: Linux/RISC-V Port
外部関数とメモリAPIのプレビュー「JEP 424:Foreign Function & Memory API(Preview)」
JavaプログラムがJavaランタイム外のコードやデータと相互運用できる APIです。
外部関数 (JVM の外部のコード)を効率的に呼び出して、外部メモリ(JVM によって管理されないメモリ) に安全にアクセスすることにより、APIはJava プログラムがネイティブ ライブラリを呼び出す際に、脆弱性や危険性を排除してネイティブ データを処理できるようにします。これはプレビュー 機能のAPIです。
【参考】:JEP 424: Foreign Function & Memory API(Preview)
仮想スレッドのプレビュー「JEP 425:Virtual Threads (Preview)」
従来のJavaスレッドは、OSのネイティブスレッドとの関係が1対1であり、Javaによる多数スレッドの作成が処理のオーバーヘッドを招くケースがありました。
Virtual Threadsはこの問題解決のための新機能で、スレッドをJava VM(仮想マシン)内で管理することで、消費リソースの削減とパフォーマンス向上を図ります。これはプレビュー機能です。
【参考】:JEP 425: Virtual Threads(Preview)
ベクトル演算API(インキュベーション中)「JEP 426:Vector API (Fourth Incubator)」
サポートされているCPU アーキテクチャ上で実行時に最適なベクトル命令にコンパイルして、ベクトル演算(1つの命令で複数のデータ処理を行う演算方式)を表現する API を導入することで、同等のスカラー演算(1つの命令で1つのデータ処理を行う方式)よりも優れたパフォーマンスを実現します。
【参考】:JEP 426: Vector API (Fourth Incubator)
パターンマッチングのプレビュー「JEP 427:Pattern Matching for switch (Third Preview)」
switch式およびステートメントのパターンマッチングによって、Javaプログラミング言語を強化します。
switchにパターンマッチングを拡張することで、式を複数のパターンに対してテストすることができ、それぞれが特定のアクションを持つため、複雑なデータ指向のクエリを簡潔かつ安全に表現することができます。本機能はプレビュー機能です。
【参考】: JEP 427:Pattern Matching for switch (Third Preview)
構造化並行処理API(インキュベーション中)「JEP 428:Structured Concurrency (Incubator)」
構造化並行処理のためのAPIを導入することによって、マルチスレッドプログラミングを簡素化します。構造化並行処理は、異なるスレッドで実行される複数のタスクを1つの作業単位として扱うことで、エラー処理やキャンセル処理の効率化、信頼性の向上、観測性の強化などを実現します。
本APIはインキュベーション中の APIです。
【参考】:JEP 428:Structured Concurrency (Incubator)
Java 19の新機能を試しましょう
ここまで、Javaプログラミング言語の最新バージョン・Java 19リリースのニュース・新機能の概要・詳細について解説しました。
オブジェクト指向言語のJavaは、OSにかかわらず実行できる汎用性の高さ・安定性・豊富なライブラリ・ガベージコレクション(メモリーリークを防ぐ機能)などが備わり、世界で最も利用されている言語と言われています。しかも、半年ごとに新たな機能が搭載され、2年に1度の割合でLTSが提供されます。
こうしたことから、Javaの人気は高く、将来性があると考えられます。プロジェクトなどで利用する際には、安定性の高いLTS版の利用が向いていますが、今回紹介したJava 19のようなフィーチャーリリース版で新機能を試しておくことをおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから