Java 17リリース

Java 17がリリースされました。またこのリリースに先立ちLTSリリースサイクルのロードマップもアナウンスされています。

Java 17リリース

Javaは半年おきに新バージョンをリリースし、3年おきにLTS(Long Term Support)をリリースするサイクルを採用していました。

LTSとは
  • Long Term Supportの略
  • 通常リリース版より長期間のサポートが提供される
  • サポートには脆弱性への対応なども含まれる

今回のJava 17 はその LTS バージョンとなり、直前のLTSバージョンである 2018年にリリースされた Java 11を置き換えるものになります。

JDK 17 Release Notes

今回リリースされた Java 17 の次は 21がLTSバージョンとなるようで、現在の3年おきリリースから2年おきのLTSリリースへ変更される予定となっています。またJava 17のサポート期限は 2026年9月までの5年間となっています。

https://www.oracle.com/java/technologies/java-se-support-roadmap.html

Oracle Javaのリリースサイクル

Oracle Java SE Support Roadmap

現実的な目線で行くとJava 8 を利用しているユーザーもそれなりに存在しており、リリースから6年を経過した Java 8 は未だに現役で利用されている印象を受けます。

これはつい先日まで現行のLTSであった Java 11利用されてない理由のひとつにJavaの商用環境での利用が有料化されたため、敬遠されている事情があります。

Oracle Releases Java 17
Next Java long-term support release delivers thousands of updates, further improving the language and platform to help developers be more productive.

ちなみに料金はプロセッサ単位やユーザー単位など、正直シンプルとは程遠いものになっていますが、一度Javaを採用したら最後、他の言語でシステムを構築しなおさない限りこの料金が発生することになります。

料金形態も決して安いとは言えない金額のため、これはJavaを選択する際の障壁となっており、他の言語への移行を進めるユーザーの話もよく聞きます。

https://blogs.oracle.com/java/post/free-java-license

しかしこのJava 17からは無料で利用可能となるライセンスが適用されました。期間は次のLTSが公開されてから1年後までとなっています。

このライセンス変更の背景には他社ビルドのJavaが無料で商用利用可能であることや、Java 8 から  Java 11への移行が進んでいない事も影響しているように思います。

追加された機能

ARMアーキテクチャ採用のMacに対応

およそ発売から1年が経過したARMベースアーキテクチャであるM1 Macへの対応が行われました。

MEMO

この機能追加は macOS/AArch64 Portとなっていますが、すでにあるコードを他の環境に合わせる事をPortingと呼びます。日本語ではポーティングと呼ばれる事が多い気がします。

https://jdk.java.net/17/release-notes

macOS Metal に対応

Java 2D での画面レンダリングがMetalに対応しました。これによってAppleが廃止を表明しているOpenGLに依存することなくなりました。

しかし、この機能はデフォルトで無効化されているので、有効化するために指定を行う必要があります。

疑似乱数の生成が改善

https://jdk.java.net/17/release-notes
何故”疑似”乱数なのか
実はコンピューター上でランダムな値を生成することは非常に困難を極めます。そのため一定の計算に基づいてランダムな値を生成する方法が考えられました。それが擬似乱数を生成するための計算式(プログラム)であり、乱数生成器とも呼ばれます。
そのため、現実的には難しいですが疑似乱数生成器では全くの同一条件で乱数を生成すると同じ値が生成されます。

乱数の利用目的によっては、セキュリティ的な問題に直結する場合もあるため乱数生成は一つの課題となっています。

JEP 356: Enhanced Pseudo-Random Number Generators

補足では2016年に発見された乱数生成に関する問題の影響を避けることが出来るとあります。

https://openjdk.java.net/jeps/356

削除された機能

Java Applet API

主にWebブラウザで利用されていたアプレットAPIが削除されました。この廃止はすでにJava9の時点でアナウンスされていましたが、削除はされていなかったためこのバージョンで実際に削除されました。

https://jdk.java.net/17/release-notes

古いテクノロジーであるFlashやJavaアプレットで行っていたようなもののうち主要なものはJavaScriptで実現可能となり、一部はさらに高速に動作するWASMに置き換えられています。

Sun Microsystemの名残も

Javaは元々SunMicrosystemsという会社が開発を行っていたため、まだその名残であるSunJCEなどの名前が残っています。

また、Javaではパッケージ名である程度クラスをまとめたものを定義しますが、まだ sun の名前を見かける事もよくあります。

Javaの今後

現時点で Java は幅広く利用されており、ほとんどのプログラミング言語ランキング等でもトップ5に入っているほどに利用されている言語になります。

しかしOracleに買収された後のJavaはライセンス形態の複雑さや、C#などの他言語の台頭によりスローペースではあるものの、シェアを落としつつあります。

しかし幅広いシステムでの利用が現時点でなされているため、数年以内に使われなくなるとは考えにくいものの、長期的な10~20年スパンで見ると今より使用されなくなることが予想されています。

記事の内容は間違いが無いように気をつけていますが、私の認識違いや、ミスなどにより間違っている可能性もあります。もし発見された場合はお問い合わせフォームよりご連絡頂けると幸いです。