OpenJDK 18が正式リリース!Java 18の新機能を解説
thumb_openjdk18_01
OpenJDK 18が正式リリース!Java 18の新機能を解説
言語
アンドエンジニア編集部
2022.04.25
この記事でわかること
OpenJDKは、オラクルが提供するJavaのオープンソース実装版です
2022年3月22日、OpenJDK 18が正式リリースされました
9つのプラットフォーム機能が強化され、UTF-8がデフォルト文字セットに変更されました

OpenJDK 18の正式リリース

img_openjdk18_01

OpenJDKは、オラクルが提供するJavaのオープンソース実装版です。2022年3月22日、オラクルよりOpenJDK 18の正式リリース発表がありました。6か月ごとの更新サイクルに基づく最新リリースで、ライブラリー・ツールの機能強化とアップデートを中心とする9つのプラットフォーム機能が強化されています。

【参考】:OpenJDK 18 【参考】:ORACLE Java 18を発表

主要変更点としては、UTF-8がデフォルト文字セットとなることでしょう。この変更で、すべての実装・オペレーティングシステム・ロケール・構成で、一貫性が保証されます。

Java 17のOracle JDK 17が無償化?影響と将来性

OpenJDKのリリースとダウンロード

OpenJDKのリリースは、GNU( General Public License, version 2)ライセンスに基づきJDK(Java Development Kit)として実装したもので、今回のリリースは「General-Availability Release」という正式リリース版です。

LinuxのAArch64とx64版、macOSのAArch64とx64版、Windows x64版がビルドリリースされました。モジュールダウンロードは、公式ダウンロードサイトから入手可能です。

【参考】:OpenJDK JDK 18 General-Availability Release 【参考】:Java Downloads

Javaのコミュニティと活動

Javaの仕様は、JSR(Java Specification Requests)により、維持と改善が実施されています。Javaのコミュニティプロセス(JCP:Java Community Process)にしたがって、メンテナンスされています。Java SE 18 PlatformはJSR 393により、規定されています。

【参考】:JSRs: Java Specification Requests 【参考】:Java SE 18 Platform JSR 393

Java SE 18の仕様

img_openjdk18_02

Java SE 18の仕様は、JSR(Java Specification Requests)で仕様化されています。JSR 393がJava SE 18の仕様定義で、実際の提供コードやドキュメントはJSR 393に基づき成果物としてまとめられています。 【参考】:Java SE 18 ( JSR 393) Final Release Specification

リリースされた新機能

JDKのリリースは、JDK Enhancement Proposals(JEP)に基づき、リリースされます。 【参考】:JDK 18 Release Notes

ライブラリは、以下の主要な更新と改善がされています。

JEP 400: UTF-8 by Default  標準Java APIのデフォルト文字セットはUTF-8となります。デフォルトの文字セットを用いるAPIの一貫性が保証されます。

JEP 408: Simple Web Server  静的ファイルのみを提供するSimple Web Serverを起動するためのコマンドラインツールとAPIが、提供されます。プロトタイピング・アドホックなコーディング・テスト目的を想定しており、特に教育コンテキスト用途で有用です。

JEP 416:メソッドハンドルによるコアリフレクションの再実装  java.lang.invokeメソッドハンドルの上に、java.lang.reflect.Method・コンストラクタ・フィールドを再実装しました。java.lang.reflectとjava.lang.invoke APIの両方のメンテナンスと開発コストを削減します。

JEP 418 インターネットアドレス解決SPI  ホスト名とアドレス解決のためのサービスプロバイダインタフェース(SPI)を定義することで、java.net.InetAddressがプラットフォームの組み込みリゾルバ以外のアドレス解決リゾルバを使用可能にします。

また、 ツールの改善項目については以下の通りです。

JEP 413:  Java APIドキュメントでのJEP Code Snippets  JavaDocのStandard Doclet用の@snippetタグで、API ドキュメントへのサンプルソースコードを組み込みしやすくしました。

 続いて、JDK の将来のリリースに向けたプレビューとインキュベータとして、以下のJEPが対応します。

JEP 417: Vector API (Third Incubator)  スケーラブルなベクトル拡張を提供する CPU アーキテクチャの利用API です。

JEP 419: Foreign Function and Memory API (Second Incubator)  JavaプログラムがJavaランタイム外部のネイティブライブラリを呼び、ネイティブデータを処理できるようにします。

JEP 420 Switchのパターンマッチング(第2回プレビュー)  switch式とステートメントのパターンマッチングにより、複雑なデータ指向のクエリを簡潔かつ安全に表現することができます。

 ちなみに、Javaプログラムの将来実装についても以下のような記載があります。

JEP 421 Finalization for Removal を非推奨  Finalization は、テスト実施のために無効とすることができます。今後のリリースではデフォルトで無効化され、将来的には削除される予定です。Finalization に依存しているライブラリやアプリケーションの管理者は、try-with-resources 文やClass Cleanerなどへの移行を検討する必要があります。

リリースされた機能詳細

リリースされた機能の詳細はリリースノートに記載されています。改善項目を以下にまとめました。 【参考】:JDK 18 Release Notes

・SerialGCの文字列重複排除サポート(JDK-8272609) ・ParallelGC の文字列の重複排除サポート(JDK-8267185) ・ZGCの文字列の重複排除サポート(JDK-8267186) ・JEP 420 スイッチのパターンマッチング(セカンドプレビュー) (JDK-8273326) ・ファイラーからJavaFileManagerへの起点要素の受け渡し(JDK-8272234) ・JEP 417:Vector API(サードインキュベータ)(JDK-8269306) ・JEP 419: 外部関数とメモリAPI(第2インキュベータ) (JDK-8274073) ・JEP 418:インターネットアドレス解決SPI(JDK-8263693) ・JEP 408:シンプルWeb サーバー(JDK-8260510) ・Charset.forName() フォールバックのデフォルト値取得(JDK-8270490) ・JEP 400:デフォルトで UTF-8(JDK-8187041) ・java.util.Properties::store メソッドの日付シコメントを制御するシステムプロパティ(JDK-8231640) ・MessagerでのprintError・printWarning・printNoteメソッド(JDK-8273157) ・ElementのJavaFileObjectへのマップ(JDK-8224922) ・Outermost型のエレメント取得(JDK-8140442) ・SourceVersion と Runtime.Version のマッピング(JDK-8275308) ・Compilation Replayの改善(JDK-8254106) ・設定可能なカードテーブルVMオプション(JDK-8272773) ・G1ヒープリージョンを512MBまで拡大(JDK-8275056) ・Finalization向けJDK Flight Recorder Event(JDK-8266936) ・SunPKCS11 プロバイダーのPKCS#11 v3.0 API の部分的サポート(JDK-8255409) ・Security Manager API非依存のSubject.getSubject・doAs API(JDK-8267108) ・keytool と jarsigner コマンドに-versionオプションを追加(JDK-8272163) ・KeyStoreにgetAttributesメソッドを追加(JDK-8225181) ・PKCS12 KeyStore保存時にStore PasswordをNullに設定可能(JDK-8231107) ・JKSからパスワード不要KCS12 へcacert を移行(JDK-8275252) ・OCSPレスポンスにおけるRSASSA-PSSサポート(JDK-8274471) ・PKCS11ライブラリでSunPKCS11プロバイダのKW・KWPモード付きAES暗号サポート(JDK-8264849) ・javacのserial lint warningの拡張チェック(JDK-8202056) ・ドキュメントにスクリプトファイルを含めるオプション(JDK-8275786) ・JEP 413: Java API ドキュメントにおけるCode Snippets(JDK-8201533) ・DocLint メッセージへの@SuppressWarnings追加(JDK-8189591)

削除された機能およびオプションについても気になるところですが、同リリースノートに詳しく記載されています。必要に応じてご確認をおすすめします。

Java SE 17と Java SE 18の違い

Java SE 17と Java SE 18の違いについては、JSR 393: Java SE 18のAnnex 2に記載されています。具体的には、以下のリンクにコンパイルした際の差異について記載されています。 【参考】:JavaTM Platform, Standard Edition API Differences between Java SE 17 (build 35) & Java SE 18 (build 37)

Java SE 18 APIの詳細については、以下のリンクに掲載されています。バージョンアップやコード移行時に参考にするのが良いでしょう。 【参考】:Java® Platform, Standard Edition Version 18 API Specification

JDKの定期更新に期待しましょう

img_openjdk18_03

OpenJDKは、オラクルが提供するJavaのオープンソース実装版です。残念ながらオラクル版ではLTSには対応していませんが、6か月周期でのリリースが期待できます。次期リリースとなるOpenJDK 19はすでに開発を始めています。最新テクノロジーを追求したい方には、特に最新情報入手をおすすめします。

Java入門!概要やメリット、基本事項について徹底解説!
Javaでできることとは?メリット・デメリットについても解説!
気になる人のTwitterをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

残業ほとんどなしの求人
IT業界の『残業ほとんど無しの求人』をピックアップ!その他、こだわり条件での求人検索も◎
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
エンジニア求人

編集部おすすめコンテンツ

残業ほとんどなしの求人
IT業界の『残業ほとんど無しの求人』をピックアップ!その他、こだわり条件での求人検索も◎
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT