Java 14のリリースプロセスが開始された。JDK 14は現在、ランプダウン(rampdown)の第1フェーズにある。すなわち、機能セットはすべてフリーズされて、今回のリリースを対象とした機能がこれ以上追加されることはない。
Javaリリースの通例として、新バージョンに向けたJEP(Java Enhancement Proposal)の一覧が作成されている。最終的な機能セットは次のようなものだ。
- JEP 345: NUMA-Aware Memory Allocation for G1
- JEP 349: JFR Event Streaming
- JEP 352: Non-Volatile Mapped Byte Buffers
- JEP 358: Helpful NullPointerExceptions
- JEP 361: Switch Expressions (Standard)
以下の2つのJEPでは、ZGCガベージコレクタを新たなプラットフォームで提供する。
- JEP 364: ZGC on macOS
- JEP 365: ZGC on Windows
以下のJEPは、プレビューおよびインキュべーティング段階の機能に関するものだ。
- JEP 305: Pattern Matching for instanceof (Preview)
- JEP 343: Packaging Tool (Incubator)
- JEP 368: Text Blocks (Second Preview)
- JEP 370: Foreign-Memory Access API (Incubator)
- JEP 359: Records (Preview)
次に紹介する一連のJEPは、その見た目以上に興味深いものかも知れない — 実はこの中には、Javaの主要な新機能セットの重要なビルディングブロックが2つまれている。
Record機能は、基本的にはJavaで名前付きタプルを実現するものだが、それと同時に、他言語で代数データ型と呼ばれる機能の前半部分にもなる。残る半分であるシールド型機能はJEP 360だが、こちらはターゲットとなるリリースがまだ決まっていない。
将来的な機能のもうひとつのビルディングブロックは、JEP 305("Pattern Matching for instanceof")である。この機能は一見すると、極めて小さなものに思われる。現時点では`instanceof`演算子を使用する場合に、見栄えの悪い定型的なキャストを排除するだけのものだからだ。
if (obj instanceof String s) { // can use s here } else { // can't use s here }
些細なことのようにも思えるが、この機能の真の力が発揮されるのは将来のJavaバージョンになってからなのだ。switch式(これもJava 14で標準化される)では、汎用的なパターンマッチングの実現がJEP 305に基づいて開発されている。これは重要な新機能のひとつであり、特に代数データ型と組み合わせた時に大きな意味を持つ。
最後に、厳密な意味では機能とは言えないJEPのグループがある — これらは単に非推奨や機能削除を扱ったものだ。
- JEP 362: Deprecate the Solaris and SPARC Ports
- JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination
- JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector
- JEP 367: Remove the Pack200 Tools and API
これが意味するのは、JDK 14はある意味で残念なマイルストンである、ということだ。Javaテクノロジの最初の公開リリースの一部として、1995年に初めて登場したプラットフォームであるSolaris上のJavaの道は、今回のリリースで終わることになる。
CMSコレクタの廃止も注目すべき点だ。現代的なワークロードのほぼすべてにおいて、G1はCMSと同等以上のパフォーマンスを示している(成熟と安定に長期間を費やした結果だ)。しかしながら、G1のポーズしきい値(pause threshold)も、ShenandoahやZGCの持つパフォーマンス上のオーバーロードも許容できないような、低レイテンシかつ処理停止に敏感なアプリケーションは、ごく一部ではあってもいまだ存在するのだ。このようなワークロードに対するソリューションがなくなるということは、事実上、短期ないし中期的にはJava 11のサポートを継続しなければならない、ということである。
全体として、主要機能の多くがプレビュー段階に留まってはいるものの、Java 14はプラットフォームが前進する上で重要なステップとなる。また現時点において、Javaマーケットが非LTSリリースに対しては大きな普及を見ていないことも事実であるため、Java 14がその採用の針を大きく動かすものになるかどうかは不透明だ。
Java 14のフィーチャーフリーズとランプダウンが行われたことにより、Java開発リポジトリのメインラインは現在、Java 15(2020年11月に公開予定)に向かっている。