発表ネタ - LL 2021向け¶
Learn Languages 2021
開催日:2021年8月28日(土)
オンラインで対談形式にて、この3年程のJavaの動向を、機能、仕様は最小限で、開発者へのインパクトを具体例付きで語る。
持ち時間 15 20分
発表内容¶
プレゼンテーション資料
https://www.slideshare.net/torutk/ll2021-java-update
発表内容¶
- Javaアップデート状況(概要)
- 言語仕様のアップデート
- APIのアップデート
- ランタイムのアップデート
- ツールのアップデート
Javaのアップデート状況(概要)¶
Javaのバージョンについては、次の2つに大別される。
- Java SE(Java Platform, Standard Edition)バージョン
Java言語、API、仮想マシンの仕様を定義したJava SE のバージョン。
JCP(Java Community Process)団体において、JSR(Java Specification Requests)として管理される。 - 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
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の種類が増えてどれを使えばよいか
- モジュールシステムで苦労
プログラミング環境の変化¶