Java 17リリース
Java 17がリリースされました。またこのリリースに先立ちLTSリリースサイクルのロードマップもアナウンスされています。
Javaは半年おきに新バージョンをリリースし、3年おきにLTS(Long Term Support)をリリースするサイクルを採用していました。
- Long Term Supportの略
- 通常リリース版より長期間のサポートが提供される
- サポートには脆弱性への対応なども含まれる
今回のJava 17 はその LTS バージョンとなり、直前のLTSバージョンである 2018年にリリースされた Java 11を置き換えるものになります。
今回リリースされた Java 17 の次は 21がLTSバージョンとなるようで、現在の3年おきリリースから2年おきのLTSリリースへ変更される予定となっています。またJava 17のサポート期限は 2026年9月までの5年間となっています。
Oracle Javaのリリースサイクル
現実的な目線で行くとJava 8 を利用しているユーザーもそれなりに存在しており、リリースから6年を経過した Java 8 は未だに現役で利用されている印象を受けます。
これはつい先日まで現行のLTSであった Java 11利用されてない理由のひとつにJavaの商用環境での利用が有料化されたため、敬遠されている事情があります。
ちなみに料金はプロセッサ単位やユーザー単位など、正直シンプルとは程遠いものになっていますが、一度Javaを採用したら最後、他の言語でシステムを構築しなおさない限りこの料金が発生することになります。
料金形態も決して安いとは言えない金額のため、これはJavaを選択する際の障壁となっており、他の言語への移行を進めるユーザーの話もよく聞きます。
しかしこのJava 17からは無料で利用可能となるライセンスが適用されました。期間は次のLTSが公開されてから1年後までとなっています。
このライセンス変更の背景には他社ビルドのJavaが無料で商用利用可能であることや、Java 8 から Java 11への移行が進んでいない事も影響しているように思います。
追加された機能
ARMアーキテクチャ採用のMacに対応
およそ発売から1年が経過したARMベースアーキテクチャであるM1 Macへの対応が行われました。
この機能追加は macOS/AArch64 Portとなっていますが、すでにあるコードを他の環境に合わせる事をPortingと呼びます。日本語ではポーティングと呼ばれる事が多い気がします。
macOS Metal に対応
Java 2D での画面レンダリングがMetalに対応しました。これによってAppleが廃止を表明しているOpenGLに依存することなくなりました。
しかし、この機能はデフォルトで無効化されているので、有効化するために指定を行う必要があります。
疑似乱数の生成が改善
そのため、現実的には難しいですが疑似乱数生成器では全くの同一条件で乱数を生成すると同じ値が生成されます。
乱数の利用目的によっては、セキュリティ的な問題に直結する場合もあるため乱数生成は一つの課題となっています。
補足では2016年に発見された乱数生成に関する問題の影響を避けることが出来るとあります。
削除された機能
Java Applet API
主にWebブラウザで利用されていたアプレットAPIが削除されました。この廃止はすでにJava9の時点でアナウンスされていましたが、削除はされていなかったためこのバージョンで実際に削除されました。
古いテクノロジーであるFlashやJavaアプレットで行っていたようなもののうち主要なものはJavaScriptで実現可能となり、一部はさらに高速に動作するWASMに置き換えられています。
Sun Microsystemの名残も
Javaは元々SunMicrosystemsという会社が開発を行っていたため、まだその名残であるSunJCEなどの名前が残っています。
また、Javaではパッケージ名である程度クラスをまとめたものを定義しますが、まだ sun の名前を見かける事もよくあります。
Javaの今後
現時点で Java は幅広く利用されており、ほとんどのプログラミング言語ランキング等でもトップ5に入っているほどに利用されている言語になります。
しかしOracleに買収された後のJavaはライセンス形態の複雑さや、C#などの他言語の台頭によりスローペースではあるものの、シェアを落としつつあります。
しかし幅広いシステムでの利用が現時点でなされているため、数年以内に使われなくなるとは考えにくいものの、長期的な10~20年スパンで見ると今より使用されなくなることが予想されています。