原文はこちら。
The original entry was written by Sharat Chander (Director, Java SE Product Management, Oracle).
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-14
The arrival of Java 14!
OpenJDK on Twitter
https://twitter.com/OpenJDK
Oracle OpenJDK 14
https://jdk.java.net/14/
Oracle JDK 14
https://oracle.com/javadownload
Oracleは6ヶ月サイクルでの5回目のFeature ReleaseであるJava 14の一般提供を発表します。2年以上にわたるこのレベルの予測可能性ならびに予測される変化の安定した流れのおかげで、開発者がより簡単にイノベーションへの採用を管理できます。

Java 14 is now available!
OracleはJava 14を全ての開発者ならびにエンタープライズに提供いたします。Oracle JDK 14はOracle JDK 15の登場までの間に、Oracle Critical Patch Updateのスケジュールに従い最小2回の四半期アップデートがあります。
Critical Patch Updates, Security Alerts and Bulletins
https://www.oracle.com/technetwork/topics/security/alerts-086861.html
Java 15は2020年9月に一般提供の予定ですが、早期アクセスビルドはすでにjdk.java.netから利用頂けます。
JDK 15 Early-Access Builds
https://jdk.java.net/15/
再度申し上げますが、OracleはJava 14をOracle OpenJDKリリースとして、クラスパス例外付きGNU General Public License v2(GPLv2+CPE)の下で提供しています。また、Oracleの製品またはサービスの一部としてOracle JDKリリースを使用する場合 、またはオープンソースライセンスよりも商用ライセンスを好む人向けには商用ライセンスの下で提供します。
Oracle JDK Releases for Java 11 and Later
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
https://orablogs-jp.blogspot.com/2018/09/oracle-jdk-releases-for-java-11-and.html
Java 14, Together
Java 11、12、13と同様、OpenJDKコミュニティの多くの個人や組織によるJava 14への貢献を引き続きたたえます。みんなでJavaを作っています。
Building JDK 11 Together
https://blogs.oracle.com/java-platform-group/building-jdk-11-together
https://orablogs-jp.blogspot.com/2018/10/building-jdk-11-together.html
The arrival of Java 12!
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-12
The arrival of Java 13!
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-13
https://logico-jp.io/2019/09/17/the-arrival-of-java-13/
JDK 14 Fix Ratio
JDKの経時的な全体的な変化率は基本的に長年一定でしたが、6か月サイクルになったことで、production-readyなイノベーションが提供されるペースは大幅に改善されました。数年ごとの大規模なメジャーリリースで数万の修正と約100のJDK拡張提案(JEP)を利用できるようにするのではなく、管理しやすく予測可能な6か月のスケジュールで、小規模な機能リリースで拡張機能を提供します。これらの変更は、重要な機能から、日常のメンテナンス、バグ修正、ドキュメントの改善までの小さな機能拡張にまで及びます。各変更は、JDK Bug Systemの1個のissueに対する1個のコミットで表されます。
JBS (JDK Bug System)
https://bugs.openjdk.java.net/secure/Dashboard.jspa
JDK 14で修正された1986個のJIRA上のIssueのうち、Oracleの面々が1458件完了させましたが、528件は個人の開発者や他の組織の開発者が貢献くださいました。Issueの担当者の組織データを照合し、JDK 14の修正の開発を支援してくれた組織のグラフは以下の通りです。

Oracleは、ARM、Google、NTT Data、Red Hat、SAPなどで働いている開発者の多大な貢献に感謝します。また、Bellsoft、Longsoonなどの小規模組織や、JDK 14の修正の3%を提供してくれた個人の開発者からの貢献にも感謝しております。
また、提案された変更をレビューしてくださった多くの経験豊富な開発者、早期アクセスビルドを試し、問題を報告したアーリーアダプター、およびOpenJDKメーリングリストにフィードバックを提供してくれた専門家に感謝します。
以下のみなさまにはビルドの品質に関する有用なフィードバックをいただいたました。ありがとうございます。
- Jaikiran Pai (representing Apache Ant)
- Uwe Schindler (representing Apache Lucene)
- Mark Thomas (representing Apache Tomcat)
- Martin Grigorov (representing Apache Wicket)
- Nikhil Nanivadekar (representing Eclipse Collections)
- Sanne Grinovero (representing Hibernate)
- Evegney Madrikov (representing JaCoCo)
- Dávid Karnok (representing RxJava)
また、品質の不具合を記録し、頻繁にアップデートを提供してくださった以下のみなさんにも感謝申し上げます。
- Andriy Redko (representing Apache CXF)
- Martin Grigorov (representing Apache Wicket)
- Nikhil J. Nanivadekar (representing Eclipse Collections)
- Marc Hoffmann (representing JaCoCo)
New in Java 14
Java 14では16個の主要な機能変更が含まれています(2個のincubatorモジュール、3個のpreview機能、2個の廃止機能、2個の削除機能を含む)。
JDK 14 features
https://openjdk.java.net/projects/jdk/14/
Incubatorモジュールにいくつかの機能強化が導入されました。Incubatorとは、最終化されていないAPIやツールを開発者に提供する手段で、これにより最終的にはJavaプラットフォームの品質を向上させるフィードバックをユーザーが提供できます。
JEP 11: Incubator Modules
https://openjdk.java.net/jeps/11
同様に、いくつかの機能強化がPreview Featureとして導入されました。これはJava SEプラットフォームの言語もしくはVM機能として、完全に具体化され、完全に実装されているが、変更の可能性があるものです。これらはJDK feature releaseで利用でき、実際の使用に基づいて開発者がフィードバックできます。このフィードバックにより、将来のリリースで永続的になる可能性があります。これにより、ユーザーはタイムリーなフィードバックを提供する機会を得ることができますし、ツールベンダーは、多くのJava開発者が実稼働で使用する前に、この機能のサポートを構築できます。
JEP 12: Preview Language and VM Features
https://openjdk.java.net/jeps/12
最後に、一部の変更は、非推奨(Deprecation)を通してJDKのサイズと範囲を縮小することを目的としています。これは、APIのライフサイクルに関する情報伝達の手法です。つまり、アプリケーションの当該APIからの移行を推奨したり、アプリケーションがAPIに新しい依存関係を形成するのを阻止したり、開発者にAPIに依存し続けるリスクを知らせたりすることを目的としています。jdeprscanツールというJava 9で導入されたツールを使えば、ユーザーはjarファイル(またはその他のクラスファイルの集合体)の静的解析をして非推奨のAPI要素の利用を識別できます。これにより、事前に将来の削除に対する準備ができるようになります。
JEP 277: Enhanced Deprecation
https://openjdk.java.net/jeps/277
jdeprscan
https://docs.oracle.com/javase/9/tools/jdeprscan.htm
JDK 14に入っている16個のJEPは以下の通りです。
JEP | 説明 |
---|---|
JEP 305 Pattern Matching for instanceof (Preview) | このプレビュー機能は、instanceof演算子のパターンマッチングによりJavaを強化します。これにより、一般的なボイラープレートコードが不要になり、開発者の生産性が向上し、より簡潔な型安全なコードの作成が可能になります。 |
JEP 343 Packaging Tool (Incubator) | このインキュベーターツールは、開発者がプラットフォーム固有の形式で配布するJavaアプリケーションをパッケージ化する方法を提供します。このツールは、制約によりランタイムとアプリケーションを単一の成果物にバンドルする必要がある最新のアプリケーションの開発者を支援します。 |
JEP 345 NUMA-Aware Memory Allocation for G1 | この機能により、Non-uniform memory access (NUMA、非均一メモリアクセス)システムでのG1ガベージコレクタの全体的なパフォーマンスが向上します。 |
JEP 349 JFR Event Streaming | この機能は、継続的な監視のためにJDK Flight Recorder(JFR)データを公開し、JFRデータへのさまざまなツールおよびアプリケーションへのアクセスを簡素化します。 |
JEP 352 Non-Volatile Mapped Byte Buffers | この機能は、不揮発性メモリを使用するときにJDKのファイルマッピングモードを追加します。不揮発性メモリの永続的な性質が、この機能で活用できるさまざまな永続性とパフォーマンスの仮定を変更します。 |
JEP 358 Helpful NullPointerExceptions | この機能は、どの変数がnullであったか、その他の有用な情報を正確に記述することにより、NullPointerExceptionsの使いやすさを向上させます。これにより、開発者の生産性が向上し、多くの開発およびデバッグツールの品質が向上することでしょう。 |
JEP 359 Records (Preview) | このプレビュー機能は、shallowly-immutableなデータを保持するクラスを宣言するためのコンパクトな構文を提供します。表面的には、この機能はこの種のクラスのボイラープレートコードを大幅に削減しますが、最終的な目標は、データをデータとしてモデル化できるようにすることです。shallowly-immutableな名目データ集合体が簡単、明確、簡潔に宣言できるでしょう。 |
JEP 361 Switch Expressions | この機能はJDK 12、13でプレビュー機能でしたが、JDK 14で完成しました。switchを使って文もしくは式として利用できるようになります。この機能は毎日のコーディングをシンプルにし、JDK 14でプレビューのパターンマッチング (JEP 305) 機能の準備が整いました。 |
JEP 362 Deprecate the Solaris and SPARC Ports | このJEPは、将来のリリースにおいて削除するために、SolarisおよびSPARCへのポーティングを廃止するものです。 |
JEP 363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector | CMSガベージコレクタは2年以上前に廃止されました。JDK 6以後CMSの後継を想定されたG1がデフォルトGCとなり、長年にわたって大規模に使用されてきました。また、2つの新しいガベージコレクタのZGCとShenandoahが導入されていますし、同時にG1に多くの改良が加えられています。 |
JEP 364 ZGC on macOS | ZGCを必要とするほとんどのユーザーはLinuxベースの環境のスケーラビリティも必要としていますが、多くの場合、WindowsおよびmacOSでのデプロイとテストが必要です。ZGCの機能の恩恵を受ける特定のデスクトップアプリケーションもあります。したがって、ZGC機能はWindowsとmacOSに移植されました。 |
JEP 365 ZGC on Windows | JEP 364をご覧ください。 |
JEP 366 Deprecate the ParallelScavenge + SerialOld GC Combination | これはParallel Scavenge、ならびにSerial Old GCアルゴリズムの組み合わせを廃止します。あまり使われておらず、将来の削除を意図したものです。 |
JEP 367 Remove the Pack200 Tools and API | これにより、pack200とunpack200、およびjava.util.jarパッケージ内のPack200 APIが削除されます。これらのツールとAPIは、Java SE 11での非推奨になっていました(JEP 336)。 |
JEP 368 Text Blocks (Second Preview) | フィードバックを受けて、Preview機能としてJava 13でテキストブロックを導入しました。2個の新たなエスケープシーケンスを追加し、テキストブロックを2回目のPreview機能として提供しています。テキストブロックのメリットは以下の通りです。 – ソースコードの複数行にわたる文字列を使用したプログラムの記述を簡素化し、一般的な場合のエスケープシーケンスを回避。 – Java以外の言語で記述されたコードを示すJavaプログラムの文字列の可読性を向上。 – 新しいコンストラクタが文字列リテラルと同じ文字列セットを表現し、同じエスケープシーケンスを解釈し、文字列リテラルと同じ方法で操作できることを規定することにより、文字列リテラルからの移行をサポート。 |
JEP 370 Foreign-Memory Access API (Incubator) | このIncubator moduleでは、JavaプログラムがJavaヒープ外の外部メモリに安全かつ効率的にアクセスできるようにするAPIを導入します。 |
Tooling Support
現在のツールおよび更新されているツールによって、開発者の生産性が向上していますが、Java 14でも、現在のJavaバージョンのサポートを提供しているツールソリューションの主要なIDEベンダーの努力を引き続き歓迎します。開発者はJava 14のサポートを以下のIDEで受けることができます。
- JetBrains IDEA
https://blog.jetbrains.com/idea/2020/01/intellij-idea-2020-1-eap/ - Apache NetBeans
https://netbeans.apache.org/download/nb113/index.html - Eclipse Marketplace
https://marketplace.eclipse.org/content/java-14-support-eclipse-2020-03-415/help
主にJavaプロジェクトに使用される一般的なビルド自動化ツールも、開発者にJava 14サポートを提供する準備ができています。Apache Mavenとそのプラグイン、およびGradle 6.3リリース候補版の両方がJava 14をサポートしています。
Apache Maven
https://maven.apache.org/
Gradle
https://docs.gradle.org/6.3-rc-1/release-notes.html#support-for-java-14
Javaは、ソフトウェアプログラマーが選択するプログラミング言語の第1位であり続けています。Java 14による改善の予定通りのデリバリが示すように、継続的な思慮深い計画とエコシステムの関与を通じて、Javaプラットフォームはクラウドにおける最新の開発と成長でよい位置にあります。