米オラクルはサンフランシスコで開催されたイベント「Oracle Code One 2019」にてJavaの最新版にあたる「Java13」のリリースを発表しました。
Javaでは「フィーチャーリリース」と呼ばれるアップデートを6ヶ月毎に実施しており、2019年3月に正式リリースとなったJava12以来のアップデートです。
本記事では、2019年9月17日に公開されたばかりの最新版「Java13」で追加される新機能や、Javaで現在取り組まれているプロジェクトなどを中心にご紹介していきたいと思います。
最新のJava13で追加された新機能
2019年9月17日に正式リリースとなったJavaの最新版Java13では5つの新機能が追加されることになりました。
「Switch Expressions(JEP354)」と「Text Blocks(JEP355)」に関してはプレビュー機能としての提供となります。
Dynamic CDS Archives(JEP350)
まずDynamic CDS ArchivesですがJEP310で追加された機能であるApplication Class-Data Sharingの拡張機能として提供されます。
Application Class-Data Sharing機能のユーザビリティ向上を目的としており、各アプリケーションでクラスを生成する際の試用実行が不要となります。
既存のApplication Class-Data Sharing機能では下記の手順でアーカイブの実行が行われていました。
- クラスリストを作成するために1回以上の試行を実施
- 1で作成したクラスリストを元にアーカイブをダンプ
- アーカイブで実行
今回のアップデートで1の試行が不要となるため処理が簡略化される結果となります。
ZGC: Uncommit Unused Memory(JEP351)
ZGC(The Z Garbage Collector)と呼ばれるガベージコレクタの処理を強化した機能で、未使用のヒープメモリをオペレーティングシステムに返却する機能が提供されます。
ZGCはOracleが提供している資料によりますと「A Scalable Low Latency Garbage Collector」と定義しており、超低レイテンシなガベージコレクターとして、データ転送における遅延時間を限りなく短くした技術とされています。
Reimplement the Legacy Socket API(JEP353)
java.net.Socketやjava.net.ServerSocket APIで使用される基本的な実装をシンプルでよりモダンな実装へと変更しています。
また、保守やデバッグについても容易に行えるように改善されているようです。
後述するJavaの最新プロジェクト「Project Loom」で研究が進められており「Fiber」という別名でも呼ばれる「ユーザーモードスレッド」での動作にも簡単に適応出来るような改善が行われています。
Switch Expressions(JEP 354)
Switch Expressionsはプレビュー機能としてJava13では提供が開始されました。
従来のSwitchの拡張機能としてSwitchステートメントまたは式としての利用が可能となります。
従来より提供されている… : labels(フォールスルー有り)形式と…->labels(フォールスルー無し)形式のいずれかを利用出来るように拡張されています。
Text Blocks(JEP355)
Text Blocksに関してもJava13ではプレビュー機能としての提供となります。
Text Blockではテキストブロックとして複数行に渡り構文を記述することが可能となります。
また構文の中にリテラルを埋め込むことが可能で、ほとんどのエスケープシーケンスを使用せずに自動的にコードを解釈してくれます。
またフォーマットに関しても、ある程度まで自動で解釈してくれるため空白が含まれた状態のHTML文などをそのままコピペした場合でも高い精度で解釈出来るようです。
Javaで現在取り組まれている最新プロジェクトをご紹介
Javaでは下記の4つの最新プロジェクトについて開発・研究が進められていることもイベントで発表されています。
ここでは各プロジェクトの概要について確認しておきましょう。
Project Amber
Project Amberでは、コードの可読性を高めるために、小規模な機能を集め生産性を重視したJava言語機能を強化することを目的としたプロジェクトです。
Project Valhalla
Project Valhallaでは、JVMやJava言語における「Value Types」や「Generic Specialization」を拡張するプロジェクトとして研究が進められています。
Java言語におけるプリミティブ型と同様の挙動をするユーザー定義の型を作成出来るようにする拡張機能などの提供が提案されています。
Project Panama
Project Panamaでは、JVM(Java仮想マシン)とCやC++などを含むJava以外のプログラミング言語で記述されたAPIとの接続を強化・改善するためのプロジェクトです。
現状、CやC++で記述されたネイティブAPIと接続させるにはJNI(Java Native Interface)を利用する必要がありますが、仕組みが複雑なため、より簡単にネイティブAPIとJVMを接続させることが出来るように研究が進められています。
Project Loom
Project Loomでは、今回のJava13の新機能でも少しご紹介しましたが「Fiber」と呼ばれる「ユーザーモードスレッド」を活用した軽量スレッドの提供や、継続(Continuations)と呼ばれるプログラム実行中にまだ評価されていない計算の改善などが含まれます。
実際にProject Loomで研究しているFiberの仕組みが組み込まれれば、従来のマルチスレッド処理と比較しても大幅に処理速度が早くなることが期待されています。
さいごに
本記事では、2019年9月17日にリリースされたばかりの最新版Java13の新機能とJavaで現在進行中のプロジェクトについてご紹介してきました。
Java13では5つの機能が新たに提供されたため、Java10での12機能、Java11での17機能、Java12での8機能追加と比べると少し寂しいアップデートとなりました。
今回リリースされたJava13に関してですが、リリース後6ヶ月間を対象とした期間限定でOracleが無償サポートを行う対象としております。
6ヶ月毎にフィーチャーリリースとして発表している最新バージョンのみがOracleの無償サポート対象となるため、利用する際には意識しておくようにしましょう。
今回のSwitch Expressionsの機能追加により、日常のコーティングが簡素化することはもちろん、JEP305として公開された「Pattern Maching for instanceof(パターンマッチ)」を利用するための準備でもあると発表されています。