Javaコラム Javaエンジニアのためのお役立ちコラム

Javaの最新バージョンをチェックしよう|Java13で実装された5つのJEPについて詳しく解説!

2021年02月26日
SE
Java13とはどのようなものなのでしょうか。
PM
2019年にオラクルによって公開されたJavaのバージョンです。

Java13とは?


Java13とは2019年にオラクルによって公開されたJavaのバージョンです。2017年に登場したJava9以降、Javaは半年ごとにバージョンアップがなされています。Java13は2019年のJava12に続くメジャーアップデートとなります。

Java13では新たに5つのJEPが実装されています。JEPとはJDK Enhancement Proposalの略であり、JDKに対する重要な変更に関する提案を意味します。こちらの記事ではJava13に新しく追加されたJEPに関して解説を行います。

JEP 350: Dynamic CDS Archives

Javaアプリケーションの終了時にクラスの動的なアーカイブを可能とする機能です。元々、Java10においてApplication Class-Data Sharingが実装されているのですが、その機能を使いやすくした機能がJava13にて導入されました。

Application Class-Data Sharingとはクラスの一覧を事前に出力し、Java起動時にその出力ファイルを指定することでアプリケーションの起動を早める機能です。Dynamic CDS Archivesではそのクラス一覧の指定を行う必要がありません。

Dynamic CDS Archivesを使って起動する方法は以下の通りです。(sample.jsaがアーカイブファイルの例です。)

JEP 351: ZGC: Uncommit Unused Memory

ZGCと呼ばれるガーベッジ・コレクターの改良が行われました。その際、未使用のメモリをOSに返却するような仕様が追加されました。

既存のZGCでは、長時間未使用なメモリはOSに返却されることがありませんでした。この仕様は多くのアプリケーションによって最適なものではないので、Java13では改良が行われました。

このJEPはExperimentalになります。

JEP 353: Reimplement the Legacy Socket API

ソケット関連のAPIである java.net.Socket 及び java.net.Server.Socketの実装方法が変更されました。この変更によりメンテナンスやデバッグのしやすさが向上しています。

java.net.Socket 及び java.net.Server.Socketに関してはJDK1.0から存在しており、非常に古い実装方法でした。そのため、Java13においては実装方法が変更されました。また、Java13ではProject Loomでの非同期処理の対応も可能となりました。

Project LoomとはJavaにてContinuation(プログラムを動停止させる仕組み)やFiber(軽量スレッドを実現する仕組み)を実現するプロジェクトです。

JEP 354: Switch Expressions

こちらはSecond Preview版ということで、Java12でPreview版としてリリースされたものの、Java13でも引き続きPreview版という扱いです。(Preview版を使うには–enable-previewをJava実行時に付与する必要があります。)

Swicth文の記法に関していくつかの修正が含まれています。

JEP 354の変更点1:アロー記法の導入

-> を用いることでswitch文の分岐に関して可読性を向上させます。

これまでは以下のように記述する必要がありました。

上記をアロー記法を用いると以下の通り記述できます。

JEP 354の変更点2:複数条件の分岐に関する記述

switch文において複数の条件に該当する場合は、以下のようにcaseを複数行記載する必要がありました。

しかし、こちらのJEPの導入により以下のように1つのcaseに複数の条件を記載することができるようになりました。

JEP 354の変更点3:switch文を式として利用可能に

switch文を式として利用可能になりました。以下のようなパラメータに応じてstringが取得できるような仕組みを例に考えてみます。

上記を以下のように記載することができるようになりました。

JEP 355: Text Blocks

複数行にまたがる文字列のリテラルがPreview版として導入されました。これによりSQL文やHTMLの記載がしやすくなりました。これまでは以下のようにHTMLを記載する必要がありました。
String html = “”\n”” +
“” Title\n”” +
“” \n”” +
“”

hogehoge

\n”” +
“” \n”” +
“”\n””;
}

改行コード等をソースコードに付与する必要があったりと、非常に可読性の低い記載方法でした。しかし、Java13からは以下の通り記述することが可能となりました。

String html = “”””””
+
Title +
+

hogehoge

+
+

“”””””;
}

SE
Java13についてよく理解できました。
PM
ぜひJava13を日々のプロダクト開発に役立てましょう。

まとめ

以上がJava13に新しく実装された機能になります。5つのJEPを紹介しましたが、影響が大きいであろう機能としてはJEP 354: Switch ExpressionsとJEP 355: Text Blocksの2つが挙げられます。

ただし、一部の機能はPreview版としてのリリースであるため、その点には注意しましょう。

Javaは半年ごとにアップデートしていきます。新しい機能に関してはキャッチアップし続けて、便利な機能に関しては日々のプロダクト開発に取り入れていきましょう。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)