JDK 14:Java14の新機能

Java Development Kit(JDK)14がGAに到達し、本番環境での一般提供リリースになりました。標準Javaへのアップグレードには、JDK Flight Recorderイベントストリーミング、パターンマッチング、スイッチ式などの新機能が含まれています。 

JDK 14は、Java用に設定された6か月のリリースリズムに続く、長期サポート(LTS)リリースではなく、Javaの機能リリースです。JDK 14は、4月と7月にセキュリティ更新プログラムを受け取り、その後、9月に予定されている非LTSリリースであるJDK15に取って代わられます。現在のLTSリリースはJDK11です。 

JDK14の新機能と改善点は次のとおりです。

  • JFRイベントストリーミングは、インプロセスアプリケーションとアウトプロセスアプリケーションの両方からJFRデータを継続的に消費するためのAPIを提供します。 JFRは、JavaアプリケーションとJVMの実行中にプロファイリングと診断データを収集するためのツールです。イベントストリーミングプロポーザルは、非ストリーミングの場合と同じ一連のイベントを記録しますが、可能であればオーバーヘッドは1%未満です。イベントストリーミングは、ディスクベースとメモリベースの両方の非ストリーミング記録と共存する必要があります。この提案の動機は、HotSpot VMがJFRを使用して500を超えるデータポイントを出力する状況であり、それらのほとんどはログファイルを解析することによってのみ利用可能です。現在、ユーザーは記録を開始、停止し、内容をディスクにダンプしてから、記録ファイルを解析する必要があります。これは、アプリケーションのプロファイリングには適していますが、監視の目的には適していません。使用状況の監視の例は、データの動的更新を表示するダッシュボードです。ディスクリポジトリから別の記録ファイルにデータをコピーするなど、記録の作成にはオーバーヘッドがあります。新しい記録ファイルを作成せずにディスクリポジトリから記録されているデータを読み取る方法があれば、オーバーヘッドの多くを回避できます。
  • 計画されている改善NullPointerExceptionsは、どの変数がnullであったかを正確に記述することにより、JVMによって生成された例外の使いやすさの改善に 関連しています。提案の作成者は、プログラムの早期終了について開発者とサポートスタッフに役立つ情報を提供し、動的例外を静的プログラムコードとより明確に関連付けることで、プログラムの理解を向上させようとしています。 1つの目標は、開発者が抱える混乱と懸念を減らすことNullPointerExceptionsです。
  • 不揮発性マップバイトバッファは、FileChannel APIを使用してMappedByteBuffer不揮発性メモリ(NVM)を参照するインスタンスを作成できるようにする新しいJDK固有のファイルマッピングモードを追加します。 NVMを使用すると、プログラマーは、入出力操作に通常必要な大幅なコピーまたは変換コストを発生させることなく、プログラムの実行全体でプログラムの状態を構築および更新できます。これは、トランザクションプログラムにとって特に重要です。したがって、このJDK拡張提案の主な目標は、クライアントがJavaプログラムからNVMにコヒーレントかつ効率的にアクセスして更新できるようにすることです。 2番目の目標は、クラスUnsafeで定義された制限付きのJDK内部APIを使用してこのコミット動作を実装することです。これにより、クラス以外のクラスで再利用できます。MappedByteBufferNVMにコミットする必要があるかもしれません。もう1つの目標は、NVMにマップされたバッファーを、監視と管理のために既存のAPIで追跡できるようにすることです。ターゲットOS / CPUプラットフォームには、Linux / x64およびLinux / AArch64が含まれます。
  • Switch式switchは、ステートメントまたは式として使用できるように拡張することにより、コーディングを簡素化し ます。Switch式は、JDK12とJDK13の両方でプレビューされた後、JDK14で永続的な機能になると予想されます。Switch式は、でのパターンマッチングの使用も準備しswitchます。パターンマッチングにより、開発者はオブジェクトからコンポーネントをより簡潔かつ安全に条件付きで抽出できます。 
  • 大規模なマシンでのG1のパフォーマンスを向上させることを目的とした、G1ガベージコレクターのNUMA対応のメモリ割り当て。 
  • Concurrent Mark Sweep(CMS)ガベージコレクターの削除。これは以前は非推奨であり、削除が予定されていました。ZGCやシェナンドアを含むCMSの後継者が生まれました。 
  • ZGCのMacOSへの移植。これまでのところ、Linuxでのみサポートされています。
  • java.util.jarパッケージ内のpack200およびunpack200ツールとPack200APIの削除。これらはすべて、Java SE 11で非推奨になり、将来削除する予定です。Pack200は、JARファイルの圧縮スキームです。
  • レコード。浅く不変のデータの透過的なホルダーであるクラスを宣言するためのコンパクトな構文を提供します。レコードを使用すると、多くの定型文を作成しなくても、本質的にデータキャリアであるクラスを簡単に作成できます。提案は、浅く不変で、行儀の良い、名目上のデータ集約を宣言することは簡単で簡潔であるべきだと述べています。
  • 開発のインキュベーター段階にある、自己完結型のJavaアプリケーションをパッケージ化するためのパッケージ化ツール。このツールはJavaFXに基づいていjavapackagerます。このようなツールはJavaに含まれていましたが、JavaFXの削除の一環としてJDK11から削除されました。
  • instanceof オペレーターのパターンマッチングで言語を強化します。これは、JDK 14のプレビュー機能になります。パターンマッチングにより、プログラム内の一般的なロジック、主にオブジェクトからのコンポーネントの条件付き抽出を、より簡潔かつ安全に表現できます。コードは簡潔でタイプセーフにすることができます。
  • テキストブロックの2番目のプレビュー。ほとんどのエスケープシーケンスの必要性を回避し、予測可能な方法で文字列を自動的にフォーマットする複数行の文字列リテラル。テキストブロックは、開発者が必要に応じてフォーマットを制御できるようにし、Javaプログラムの記述を簡素化し、文字列の可読性を高めます。テキストブロックはJDK13でプレビューされました。JDK 14の反復では、明示的な空白と改行制御を管理するためのエスケープシーケンスが追加されます。
  • ParallelScavengeとSerialOldガベージコレクションアルゴリズムの組み合わせは非推奨です。Javaのメンテナは、この組み合わせはほとんど使用されないと考えていますが、多くのメンテナンスが必要です。
  • ZGC(Zガベージコレクター)のWindowsへの移植。この機能は、ターゲット候補リストに戻された後、再び公式ターゲットリストに移動しました。
  • 外部メモリアクセスAPI。Javaヒープ外の外部メモリに安全かつ効率的にアクセスするためのJavaプログラム用のAPIが導入されています。このAPIは、Javaプログラムがメモリにアクセスするための主要な手段(nio.ByteBufferおよびなど)の代替として機能する必要がありsun.misc.Unsafeます。新しいAPIは、ネイティブ、永続メモリ、マネージヒープなど、さまざまな種類のメモリで動作できる必要があります。 APIがJVMの安全性を損なう可能性はありません。メモリの割り当て解除は、ソースコードで明示的に行う必要があります。 APIは、ProjectPanamaの目標であるネイティブの相互運用サポートの開発を支援することが期待されています。
  • Solaris / Sparc、Solaris / x64、およびLinux / Sparcポートの非推奨。将来のリリースで、これらを削除する予定です。これらのポートのサポートを終了すると、OpenJDKの貢献者は新機能の開発を加速することができます。SolarisとSparcは、Javaの最初の作成者であるSun Microsystemsの要となるテクノロジーでしたが、近年、LinuxOSとIntelプロセッサによってテクノロジー分野で取って代わられています。

JDK14をダウンロードする場所

Linux、Windows、およびmacOSの場合はjdk.java.netからオープンソースのJDK14をダウンロードできます。Oracleの商用JavaSE 14のダウンロードは、Oracle.comからダウンロードできます。