プロジェクト

全般

プロフィール

発表ネタ - LL 2021向け

Learn Languages 2021
開催日:2021年8月28日(土)

オンラインで対談形式にて、この3年程のJavaの動向を、機能、仕様は最小限で、開発者へのインパクトを具体例付きで語る。
持ち時間 15 20分

発表内容

プレゼンテーション資料
https://www.slideshare.net/torutk/ll2021-java-update

発表内容

  1. Javaアップデート状況(概要)
  2. 言語仕様のアップデート
  3. APIのアップデート
  4. ランタイムのアップデート
  5. ツールのアップデート

Javaのアップデート状況(概要)

Javaのバージョンについては、次の2つに大別される。

  1. Java SE(Java Platform, Standard Edition)バージョン
    Java言語、API、仮想マシンの仕様を定義したJava SE のバージョン。
    JCP(Java Community Process)団体において、JSR(Java Specification Requests)として管理される。
  2. JDK(Java Development Kit)バージョン
    Java SE 仕様を実装したJavaプログラムの開発・実行環境のバージョン。
    Java SE仕様をOpenJDKコミュニティがGPLv2クラスパス例外ライセンスの下でオープンソース実装しているOpenJDKが著名。

両者はほぼ同時にリリースされるので、プログラマーとしてはあまり意識することはないかも。

Java SE仕様のバージョンとリリース
Java SE JCP JSR Release1
Java SE 9 JSR-379 2017-09-21
Java SE 10 JSR-383 2018-03-14
Java SE 11 JSR-384 2018-09-19
Java SE 12 JSR-386 2019-03-12
Java SE 13 JSR-388 2019-09-10
Java SE 14 JSR-389 2020-03-10
Java SE 15 JSR-390 2020-09-08
Java SE 16 JSR-391 2021-03-09
Java SE 17 JSR-392 N/A

1 Final Release

https://jcp.org

OpenJDK実装のバージョンとリリース(2019年9月以降)
日付 バージョン LTS? 備考
2018-09-21 JDK 11 Yes 新しいリリースモデルにおける初のLTS版
2019-03-19 JDK 12 no
2019-09-17 JDK 13 no
2020-03-17 JDK 14 no
2020-09-15 JDK 15 no
2021-03-16 JDK 16 no
2021-09-14 JDK 17 Yes(予定)

OpenJDK 9のリリース(2017-09-21)以後、半年毎にメジャーバージョンアップしている。
それらのうち、3年毎に1つのリリースをLTS版とし、長期間に渡ってサポート(アップデート)を提供、それ以外は非LTS版として半年間(次のメジャーバージョンがリリースされるまでの期間)の短命な提供となる。

OpenJDKのアップデートは、四半期毎(毎年1月、4月、7月、10月)に定期便で提供される。

OpenJDKディストリビューション

OpenJDK(オープンソース)を基に、Oracle他幾つかの組織がビルドした有償あるいは無償で提供されるバイナリ(OpenJDKディストリビューション)がある。

組織名 OpenJDK バイナリ名 Linux Windows MacOS ライセンス 長期サポート JavaFX同梱 備考
Oracle Oracle JDK 商用ライセンス1 N/A
Oracle OpenJDK GPLv2 クラスパス例外 N/A N/A
Eclipse Temurin GPLv2 クラスパス例外 N/A
Azul Systems Zulu GPLv2 クラスパス例外 N/A 各OSのARM、Linux PPC、Solaris SPARC提供有
ZuluFX GPLv2 クラスパス例外 macOS ARM提供有
Red Hat (Red Hat)OpenJDK N/A 商用ライセンス2 N/A
Amazon Corretto GPLv2 クラスパス例外 N/A Linux AArch64提供有
BellSoft Liberica JDK GPLv2 クラスパス例外 各OSのARM、Linux PPC提供有
Microsoft Microsoft Build OpenJDK GPLv2 クラスパス例外 N/A 各OSのAArch64提供有
SAP SapMachine GPLv2 クラスパス例外 N/A Linux PPC提供有

1 個人利用または組織での開発用途で無償利用可能な OTNライセンス(Oracle Technology Network License Agreement for Oracle Java SE)あり。
https://www.oracle.com/technetwork/java/javase/terms/license/javase-license.html

2 Linux(RHEL)上でのOpenJDKは、RHELサブスクリプションに基づく使用。Red Hatミドルウェア以外でWindows上での実行(Java workload)には追加のサブスクリプション必要。Java workloadに開発用途が含まれるかどうかは調査中。

製品に使用しているOpenJDKディストリビューションの比率調査

https://snyk.io/jvm-ecosystem-report-2021/

AdoptOpenJDK 44%
Oracle OpenJDK 28%
Oracle JDK 23%
Azul Zulu 16%
Amazon Corretto 9%
Linux同梱 JDK 8%
Red Hat JDK 8%

言語仕様のアップデート

  • ラムダ式の引数に型推論var宣言(11)
  • switch式(14)
  • テキストブロック(15)
  • instanceofのパターンマッチング(16)
  • Records型(16)
  • Sealedクラス(17)

APIのアップデート(抜粋)

  • HTTPクライアントAPI(11)
  • Java EEおよびCORBA機能の削除(11)
  • Streamを二股に分岐(teeing)、BiFunctionで合流(12)
  • CompactNumberFormat で数値をロケール依存の桁単位で書式化(12)
  • NullPointerExceptionのメッセージ改善(14)
  • pack200関連のAPI削除(14)
  • デジタル署名アルゴリズムにEdwars-Curve Digital Signature Algorithm追加(15)
  • UNIXドメインソケットチャネル(16)
  • StreamインタフェースにtoListメソッド、mapMultiメソッド追加(16)
  • java.util.HexFormatクラス(17)

ランタイム・ツールのアップデート

  • 単一ソースファイルを直接実行(11)
  • ガベージコレクタのEpsilon GC:なにもしないGC(11)
  • Flight Recorder(11)
  • デフォルトCDSアーカイブ(12)
  • 動的なCDSアーカイブ(13)
  • CMS GC削除(14)
  • ZGC、Shenandoah GC(15)
  • Nashorn JavaScriptエンジン削除(15)
  • jpackage(16)
CPU、OS対応特出し
  • SolarisとSPARC版対応削除(15)
  • Alpine Linux、Windows/AArch64対応(16)
  • macOS/AArch64対応(17)
jpackageの効果

GUI(Swing)で、Hello Worldを表示するプログラムを、ランタイム環境(JavaVM)を含めてOSネイティブインストーラ化しインストールすることが可能に。

種類 容量(MB) 備考
開発ディレクトリ 22 ビルド後のサイズ(配布ファイル含む)
配布ファイル(インストーラ) 21.5 Windows MSI形式
展開ディレクトリ 60

検討メモ

対談でのネタ

JDK

【没ネタ】JDKの有償化問題

JDK 8までは、旧Sun Microsystems社が無償でJDKを提供し、Oracleが買収後はOracleが無償でJDK(Oracle JDK)を提供し、Javaを利用するアプリケーションの多くがそれを利用してきた。
ところが、2019年1月以降Oracle社がOracle JDKの商用利用を有償化したのに伴い、大きな騒ぎとなった。
Oracleは、非LTS版のみのOracleビルドのOpenJDKと、開発用途等に利用を制限するOTNライセンスでのOracle JDKを無償提供している。
この時期、他の組織から続々とOpenJDKを基にバイナリを提供する、いわゆるOpenJDKディストリビューションが提供されるようになり、その中にはLTS版のJDKを無償で提供するものも多く含まれる。

これにより、開発者・利用者は、有償でのサポートを受けられるJDKや、無償で利用可能なJDKを自由に選択できるようになっている。

Java開発環境

メジャーな開発環境

Synk社(アプリケーションセキュリティ技術を開発する会社)調べ
https://snyk.io/jvm-ecosystem-report-2021/

IntelliJ IDEA 72%
Eclipse IDE 25%
Visual Studio Code 23%
Vi, Vim, Emacs 14%
NetBeans 13%
  • 複数回答ありのアンケート

Java開発者として最近のJava動向インパクト

  • JDKを選ばなくてはならない
  • 言語仕様が増えている
  • GCの種類が増えてどれを使えばよいか
  • モジュールシステムで苦労

プログラミング環境の変化