SlideShare une entreprise Scribd logo
1  sur  21
Java Updates
LL2021
高橋 徹(Java読書会BOF)
岩室 元典(Java読書会BOF)
Java読書会BOFについて
2021-08-28 LLoT Language Update - Java 2
毎月1回開催中
現時点で
267回開催(39冊)
http://www.javareading.com/bof/
2020.10~ 2021.8~
2019.11~
2019.6~
2018.12~
本日お話すること
Javaのアップデート概要
言語仕様
ライブラリ(API)
ランタイム(JavaVM)
ツール
2021-08-28 LLoT Language Update - Java 3
Javaのアップデート概要
2021-08-28 LL2021 Language Update - Java 4
1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021
1.0 1.1 1.2 1.3 1.4 5 6
7 8 9
10
11
12
13
14
15
16
17
半年毎のメジャーバージョンアップ
3年毎にLTS版、長期サポート
それ以外は非LTS版、次のメジャーバージョンまでの短命サポート
今日お話しする範囲
α
Javaのアップデート概要
2021-08-28 LL2021 Language Update - Java 5
8 11
JVM Ecosystem Report 2021より引用
https://snyk.io/jvm-ecosystem-report-2021/
複数回答ありの結果
製品で使用しているJDKバージョンの調査結果
Javaのアップデート概要
No. 種類 内容
1 Java SE
(Java Platform, Standard Edition)
バージョン
Java言語、標準API、仮想マシンの仕様
2 JDK
(Java Development Kit)
バージョン
Java SE仕様を実装したJavaプログラムの開
発・実行環境
2021-08-28 LL2021 Language Update - Java 6
• OpenJDKコミュニティがGPLv2クラスパス例外の下オープンソース実装している
JDKがOpenJDK
• OpenJDK(ソースコード)をOracle社他幾つかの組織がビルドしたOpenJDKバイ
ナリを有償あるいは無償で提供
「OpenJDKディストリビューション」
Java SE、JDKそしてOpenJDKについて
Javaのアップデート概要
組織名 ディストリビューション名 対応OS ライセンス LTS
版
備考
Oracle
Oracle JDK Linux, Windows, macOS 商用†1 ✔
Oracle OpenJDK Linux, Windows, macOS GPLv2クラスパス例外 N/A
Eclipse Temurin Linux, Windows, macOS GPLv2クラスパス例外 ✔
Azul
Systems
Zulu Linux, Windows, macOS GPLv2クラスパス例外 ✔
ZuluFX Linux, Windows, macOS GPLv2クラスパス例外 ✔ JavaFX同梱版
Red Hat (Red Hat)OpenJDK Linux, Windows GPLv2クラスパス例外†2 ✔
Amazon Corretto Linux, Windows, macOS GPLv2クラスパス例外 ✔
BellSoft Liberica JDK Linux, Windows, macOS GPLv2クラスパス例外 ✔ JavaFX同梱版あり
Microsoft Microsoft Build
OpenJDK
Linux, Windows, macOS
GPLv2クラスパス例外 ✔
SAP SapMachine Linux, Windows, macOS GPLv2クラスパス例外 ✔
2021-08-28 LL2021 Language Update - Java 7
†1 個人利用または組織での開発用途で無償利用可能な OTNライセンスあり
†2 Linux(RHEL)上でのOpenJDKは、RHELサブスクリプションに基づく使用。Red Hatミドルウェア
以外でWindows上での実行(Java workload)には追加のサブスクリプション必要。
OpenJDKディストリビューション
Javaのアップデート概要
OpenJDKディストリビューション 比率
1 AdoptOpenJDK †1 44%
2 Oracle OpenJDK 28%
3 Oracle JDK 23%
4 Zulu 16%
5 Corretto 9%
6 Linux同梱 OpenJDK 8%
7 Red Hat JDK 8%
8 Oracle Graal VM 6%
2021-08-28 LL2021 Language Update - Java 8
JVM Ecosystem Report 2021より
https://snyk.io/jvm-ecosystem-report-2021/
複数回答ありの結果
製品に使用しているOpenJDKディストリビューション
の比率調査
†1 現在はEclipse
ファウンデーション
のTemurinに移管
Java Update - 言語仕様
• switch式⓮
• テキストブロック⓯
• instanceofのパターンマッチング⓰
• レコード⓰
• シールクラス⓱
2016-08-27 LLoT Language Update - Java 9
注)プレビュー機能を除く
Java SE 11より後に導入された言語仕様の更新
Java Update – 言語仕様
switch式
2016-08-27 LLoT Language Update - Java 10
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
switch式の結果を
変数に代入
break不要
フォールスルーなし
複数条件を列挙
注)java.time.DayOfWeek(enum型)を使った例で、全ての列挙子をcaseで使用して
いるので defaultの記述は不要
Java Update – 言語仕様
テキストブロック
2016-08-27 LLoT Language Update - Java 11
String html = ”””
<html>
<body>
<p>Hello World.</p>
</body>
</html>
”””;
テキストブロック
開始
テキストブロック
終了
テキストブロック終了記号のインデント位置
または空白以外のテキストブロックで最も浅
いインデント位置までが除外される。
Java Update – 言語仕様
instanceofのパターンマッチング
2016-08-27 LLoT Language Update - Java 12
Shape shape = ...
if (shape instanceof Rectangle r) {
return r.width() * r.height();
} キャスト演算子不要
instanceofの第2オペランドに
指定したパターン変数は、
キャスト不要で第1オペランド
の型として利用可能
Shape shape = ...
if (shape instanceof Rectangle) {
Rectangle r = (Rectangle) shape;
return r.width() * r.height();
}
従来のコード
キャスト演算子必要
Java Update – 言語仕様
レコード
2016-08-27 LLoT Language Update - Java 13
public record Rectangle(double width, double height){}
新たな型 record
の導入
final class Rectangle extends Record {
private final double width;
private final double height;
Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
double width() { return this.width; }
double height() { return this.height; }
public boolean equals(Object o) { ... 略 }
public int hashCode() { ... 略 }
public String toString() { ... 略 }
}
レコードを構成する要素
の型と名前を宣言
構成要素がfinalのフィール
ドとして生成
コンストラクタが生成
getterメソッドが生成
equals, hashCode,
toStringメソッドが生成
Java Update – 言語仕様
シールクラス
2016-08-27 LLoT Language Update - Java 14
public sealed class Shape
permits Circle, Square, Rectangle {
...
}
sealed修飾子導入
permitsで拡張可能なクラ
スを指定
Shape
Circle Square Rectangle Hollow
permitsで指定さ
れない型は拡張
不可
Java Update – ライブラリ
• Streamを分岐(teeing)、BiFunctionで合流⓬
• CompactNumberFormat で数値をロケール依存の桁単位
で書式化⓬
• NullPointerExceptionのメッセージ改善⓮
• デジタル署名アルゴリズムにEdwars-Curve Digital
Signature Algorithm追加⓯
• UNIXドメインソケットチャネル⓰
• StreamインタフェースにtoListメソッド、mapMultiメ
ソッド追加⓰
• java.util.HexFormatクラス⓱
2016-08-27 LLoT Language Update - Java 15
アプリケーション開発者の観点で気になるAPIを抜粋します
Java Update – ランタイム
• デフォルトCDSアーカイブ⓬
• 動的なCDSアーカイブ⓭
• ZGC、Shenandoah GC追加⓯
• CMS GC削除⓭
• Nashorn JavaScriptエンジン削除⓯
• Windows/AArch64対応⓰
• macOS/AArch64対応⓱
• Solaris OSとSPARCプロセッサ対応取りやめ⓯
2016-08-27 LLoT Language Update - Java 16
CDS: クラスデータ共有。起動時間短縮、フットプリント削減に寄与
GC: ガベージコレクタ
Java Update – ツール
• javadocの古い機能削除⓭
• pack200、unpack200ツール削除⓮
• jjs削除⓯
• rmic削除⓯
• jpackage⓰
2016-08-27 LLoT Language Update - Java 17
javadoc: ソースファイルのコメントからAPIリファレンスをHTML形式で生
成する。
pack200/unpack200:JARファイルを高圧縮する。
jjs:javascript実行コマンド
rmic: JavaのリモートプロシージャコールRMIで静的スタブを生成するツー
ル。
Java Update – ツール
jpackage
• Javaプログラムをその実行環境(JavaVM)と一緒に梱包し、
実行したい環境のプログラム配布形式まとめるツール。
2021-08-28 LL2021 Language Update - Java 18
OS 形式
Windows EXE or MSI
Linux RPM or DEB
macOS DMG
プログラムが使用するJDK
のモジュールだけを抜粋
するので配布サイズが小
さい
種類 容量 (参考)Electronの場合
開発サイズ 22MB 680MB
配布ファイル 21.5MB 78MB
展開サイズ 60MB 256MB
GUI(Swing)で Hello Worldを表示するプログラムのサイズ(Windows OS)
Java Update – ツール
統合開発環境(IDE)
IDE 比率
1 IntelliJ IDEA 71.6%
2 Eclipse IDE 24.6%
3 Visual Studio Code 23.2%
4 Vi/Vim/Emacs/etc 13.6%
5 Apache NetBeans 12.9%
6 Android Studio 5.9%
7 Oracle JDeveloper 1.1%
8 その他 0.9%
2021-08-28 LL2021 Language Update - Java 19
JVM Ecosystem Report 2021より引用
https://snyk.io/jvm-ecosystem-report-2021/
複数回答ありの結果
もっとも使われている統合開発環境(IDE)
Java Update情報源
• Java Magazineオンライン
https://blogs.oracle.com/javamagazine/
• 日本語訳(一部)
https://blogs.oracle.com/otnjp/java-magazine-2
• Azul Java Updates
https://www.azul.com/category/java-updates/
「67 New Features in JDK 16」等の記事
• InfoQ Javaニュース
https://www.infoq.com/jp/java/news/
「Javaニュース総まとめ」の記事(日本語)
2021-08-28 LL2021 Language Update - Java 20
ご清聴ありがとうございました
2016-08-27 LLoT Language Update - Java 21

Contenu connexe

Tendances

Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugMigration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugYuji Kubota
 
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...NTT DATA Technology & Innovation
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)NTT DATA Technology & Innovation
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...David Buck
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug efvsug_jim
 
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズオラクルエンジニア通信
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)NTT DATA Technology & Innovation
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Applicationguestc68147
 
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjugHead toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjugYuji Kubota
 
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)NTT DATA Technology & Innovation
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpYuji Kubota
 

Tendances (15)

Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugMigration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
 
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug ef
 
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
 
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjugHead toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjug
 
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 

Similaire à LL2021 Java update

Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Hirofumi Iwasaki
 
Dotnetcore30forwindesktop
Dotnetcore30forwindesktopDotnetcore30forwindesktop
Dotnetcore30forwindesktopru pic
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 日本マイクロソフト株式会社
 
18-D-1 .Net Framework 4 概要
18-D-1 .Net Framework 4 概要18-D-1 .Net Framework 4 概要
18-D-1 .Net Framework 4 概要Developers Summit
 
JakartaOne Livestream Japan 2020
JakartaOne Livestream Japan 2020JakartaOne Livestream Japan 2020
JakartaOne Livestream Japan 2020Kenji Kazumura
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
20161119 java one-feedback_osaka
20161119 java one-feedback_osaka20161119 java one-feedback_osaka
20161119 java one-feedback_osakaTakashi Ito
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 Takakiyo Tanaka
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化maruyama097
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?Takahiro YAMADA
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21Takakiyo Tanaka
 
2011年javaの旅
2011年javaの旅2011年javaの旅
2011年javaの旅torutk
 
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説Akira Inoue
 
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-Takakiyo Tanaka
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web IntegrationKazuchika Sekiya
 
Spring2概論@第1回JSUG勉強会
Spring2概論@第1回JSUG勉強会Spring2概論@第1回JSUG勉強会
Spring2概論@第1回JSUG勉強会Mitsuhiro Okamoto
 
Modern frontend overview_r3
Modern frontend overview_r3Modern frontend overview_r3
Modern frontend overview_r3makotunes
 

Similaire à LL2021 Java update (20)

Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
 
Dotnetcore30forwindesktop
Dotnetcore30forwindesktopDotnetcore30forwindesktop
Dotnetcore30forwindesktop
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
 
18-D-1 .Net Framework 4 概要
18-D-1 .Net Framework 4 概要18-D-1 .Net Framework 4 概要
18-D-1 .Net Framework 4 概要
 
JakartaOne Livestream Japan 2020
JakartaOne Livestream Japan 2020JakartaOne Livestream Japan 2020
JakartaOne Livestream Japan 2020
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
20161119 java one-feedback_osaka
20161119 java one-feedback_osaka20161119 java one-feedback_osaka
20161119 java one-feedback_osaka
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
2011年javaの旅
2011年javaの旅2011年javaの旅
2011年javaの旅
 
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
 
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
 
Spring2概論@第1回JSUG勉強会
Spring2概論@第1回JSUG勉強会Spring2概論@第1回JSUG勉強会
Spring2概論@第1回JSUG勉強会
 
Modern frontend overview_r3
Modern frontend overview_r3Modern frontend overview_r3
Modern frontend overview_r3
 
JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説
 

Plus de torutk

Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxtorutk
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...torutk
 
LLoT2016 Java Update
LLoT2016 Java UpdateLLoT2016 Java Update
LLoT2016 Java Updatetorutk
 
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々torutk
 
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)torutk
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lttorutk
 
実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)torutk
 
Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動torutk
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリークtorutk
 

Plus de torutk (9)

Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
 
LLoT2016 Java Update
LLoT2016 Java UpdateLLoT2016 Java Update
LLoT2016 Java Update
 
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
 
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)
 
Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリーク
 

LL2021 Java update

  • 2. Java読書会BOFについて 2021-08-28 LLoT Language Update - Java 2 毎月1回開催中 現時点で 267回開催(39冊) http://www.javareading.com/bof/ 2020.10~ 2021.8~ 2019.11~ 2019.6~ 2018.12~
  • 4. Javaのアップデート概要 2021-08-28 LL2021 Language Update - Java 4 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 1.0 1.1 1.2 1.3 1.4 5 6 7 8 9 10 11 12 13 14 15 16 17 半年毎のメジャーバージョンアップ 3年毎にLTS版、長期サポート それ以外は非LTS版、次のメジャーバージョンまでの短命サポート 今日お話しする範囲 α
  • 5. Javaのアップデート概要 2021-08-28 LL2021 Language Update - Java 5 8 11 JVM Ecosystem Report 2021より引用 https://snyk.io/jvm-ecosystem-report-2021/ 複数回答ありの結果 製品で使用しているJDKバージョンの調査結果
  • 6. Javaのアップデート概要 No. 種類 内容 1 Java SE (Java Platform, Standard Edition) バージョン Java言語、標準API、仮想マシンの仕様 2 JDK (Java Development Kit) バージョン Java SE仕様を実装したJavaプログラムの開 発・実行環境 2021-08-28 LL2021 Language Update - Java 6 • OpenJDKコミュニティがGPLv2クラスパス例外の下オープンソース実装している JDKがOpenJDK • OpenJDK(ソースコード)をOracle社他幾つかの組織がビルドしたOpenJDKバイ ナリを有償あるいは無償で提供 「OpenJDKディストリビューション」 Java SE、JDKそしてOpenJDKについて
  • 7. Javaのアップデート概要 組織名 ディストリビューション名 対応OS ライセンス LTS 版 備考 Oracle Oracle JDK Linux, Windows, macOS 商用†1 ✔ Oracle OpenJDK Linux, Windows, macOS GPLv2クラスパス例外 N/A Eclipse Temurin Linux, Windows, macOS GPLv2クラスパス例外 ✔ Azul Systems Zulu Linux, Windows, macOS GPLv2クラスパス例外 ✔ ZuluFX Linux, Windows, macOS GPLv2クラスパス例外 ✔ JavaFX同梱版 Red Hat (Red Hat)OpenJDK Linux, Windows GPLv2クラスパス例外†2 ✔ Amazon Corretto Linux, Windows, macOS GPLv2クラスパス例外 ✔ BellSoft Liberica JDK Linux, Windows, macOS GPLv2クラスパス例外 ✔ JavaFX同梱版あり Microsoft Microsoft Build OpenJDK Linux, Windows, macOS GPLv2クラスパス例外 ✔ SAP SapMachine Linux, Windows, macOS GPLv2クラスパス例外 ✔ 2021-08-28 LL2021 Language Update - Java 7 †1 個人利用または組織での開発用途で無償利用可能な OTNライセンスあり †2 Linux(RHEL)上でのOpenJDKは、RHELサブスクリプションに基づく使用。Red Hatミドルウェア 以外でWindows上での実行(Java workload)には追加のサブスクリプション必要。 OpenJDKディストリビューション
  • 8. Javaのアップデート概要 OpenJDKディストリビューション 比率 1 AdoptOpenJDK †1 44% 2 Oracle OpenJDK 28% 3 Oracle JDK 23% 4 Zulu 16% 5 Corretto 9% 6 Linux同梱 OpenJDK 8% 7 Red Hat JDK 8% 8 Oracle Graal VM 6% 2021-08-28 LL2021 Language Update - Java 8 JVM Ecosystem Report 2021より https://snyk.io/jvm-ecosystem-report-2021/ 複数回答ありの結果 製品に使用しているOpenJDKディストリビューション の比率調査 †1 現在はEclipse ファウンデーション のTemurinに移管
  • 9. Java Update - 言語仕様 • switch式⓮ • テキストブロック⓯ • instanceofのパターンマッチング⓰ • レコード⓰ • シールクラス⓱ 2016-08-27 LLoT Language Update - Java 9 注)プレビュー機能を除く Java SE 11より後に導入された言語仕様の更新
  • 10. Java Update – 言語仕様 switch式 2016-08-27 LLoT Language Update - Java 10 int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; }; switch式の結果を 変数に代入 break不要 フォールスルーなし 複数条件を列挙 注)java.time.DayOfWeek(enum型)を使った例で、全ての列挙子をcaseで使用して いるので defaultの記述は不要
  • 11. Java Update – 言語仕様 テキストブロック 2016-08-27 LLoT Language Update - Java 11 String html = ””” <html> <body> <p>Hello World.</p> </body> </html> ”””; テキストブロック 開始 テキストブロック 終了 テキストブロック終了記号のインデント位置 または空白以外のテキストブロックで最も浅 いインデント位置までが除外される。
  • 12. Java Update – 言語仕様 instanceofのパターンマッチング 2016-08-27 LLoT Language Update - Java 12 Shape shape = ... if (shape instanceof Rectangle r) { return r.width() * r.height(); } キャスト演算子不要 instanceofの第2オペランドに 指定したパターン変数は、 キャスト不要で第1オペランド の型として利用可能 Shape shape = ... if (shape instanceof Rectangle) { Rectangle r = (Rectangle) shape; return r.width() * r.height(); } 従来のコード キャスト演算子必要
  • 13. Java Update – 言語仕様 レコード 2016-08-27 LLoT Language Update - Java 13 public record Rectangle(double width, double height){} 新たな型 record の導入 final class Rectangle extends Record { private final double width; private final double height; Rectangle(double width, double height) { this.width = width; this.height = height; } double width() { return this.width; } double height() { return this.height; } public boolean equals(Object o) { ... 略 } public int hashCode() { ... 略 } public String toString() { ... 略 } } レコードを構成する要素 の型と名前を宣言 構成要素がfinalのフィール ドとして生成 コンストラクタが生成 getterメソッドが生成 equals, hashCode, toStringメソッドが生成
  • 14. Java Update – 言語仕様 シールクラス 2016-08-27 LLoT Language Update - Java 14 public sealed class Shape permits Circle, Square, Rectangle { ... } sealed修飾子導入 permitsで拡張可能なクラ スを指定 Shape Circle Square Rectangle Hollow permitsで指定さ れない型は拡張 不可
  • 15. Java Update – ライブラリ • Streamを分岐(teeing)、BiFunctionで合流⓬ • CompactNumberFormat で数値をロケール依存の桁単位 で書式化⓬ • NullPointerExceptionのメッセージ改善⓮ • デジタル署名アルゴリズムにEdwars-Curve Digital Signature Algorithm追加⓯ • UNIXドメインソケットチャネル⓰ • StreamインタフェースにtoListメソッド、mapMultiメ ソッド追加⓰ • java.util.HexFormatクラス⓱ 2016-08-27 LLoT Language Update - Java 15 アプリケーション開発者の観点で気になるAPIを抜粋します
  • 16. Java Update – ランタイム • デフォルトCDSアーカイブ⓬ • 動的なCDSアーカイブ⓭ • ZGC、Shenandoah GC追加⓯ • CMS GC削除⓭ • Nashorn JavaScriptエンジン削除⓯ • Windows/AArch64対応⓰ • macOS/AArch64対応⓱ • Solaris OSとSPARCプロセッサ対応取りやめ⓯ 2016-08-27 LLoT Language Update - Java 16 CDS: クラスデータ共有。起動時間短縮、フットプリント削減に寄与 GC: ガベージコレクタ
  • 17. Java Update – ツール • javadocの古い機能削除⓭ • pack200、unpack200ツール削除⓮ • jjs削除⓯ • rmic削除⓯ • jpackage⓰ 2016-08-27 LLoT Language Update - Java 17 javadoc: ソースファイルのコメントからAPIリファレンスをHTML形式で生 成する。 pack200/unpack200:JARファイルを高圧縮する。 jjs:javascript実行コマンド rmic: JavaのリモートプロシージャコールRMIで静的スタブを生成するツー ル。
  • 18. Java Update – ツール jpackage • Javaプログラムをその実行環境(JavaVM)と一緒に梱包し、 実行したい環境のプログラム配布形式まとめるツール。 2021-08-28 LL2021 Language Update - Java 18 OS 形式 Windows EXE or MSI Linux RPM or DEB macOS DMG プログラムが使用するJDK のモジュールだけを抜粋 するので配布サイズが小 さい 種類 容量 (参考)Electronの場合 開発サイズ 22MB 680MB 配布ファイル 21.5MB 78MB 展開サイズ 60MB 256MB GUI(Swing)で Hello Worldを表示するプログラムのサイズ(Windows OS)
  • 19. Java Update – ツール 統合開発環境(IDE) IDE 比率 1 IntelliJ IDEA 71.6% 2 Eclipse IDE 24.6% 3 Visual Studio Code 23.2% 4 Vi/Vim/Emacs/etc 13.6% 5 Apache NetBeans 12.9% 6 Android Studio 5.9% 7 Oracle JDeveloper 1.1% 8 その他 0.9% 2021-08-28 LL2021 Language Update - Java 19 JVM Ecosystem Report 2021より引用 https://snyk.io/jvm-ecosystem-report-2021/ 複数回答ありの結果 もっとも使われている統合開発環境(IDE)
  • 20. Java Update情報源 • Java Magazineオンライン https://blogs.oracle.com/javamagazine/ • 日本語訳(一部) https://blogs.oracle.com/otnjp/java-magazine-2 • Azul Java Updates https://www.azul.com/category/java-updates/ 「67 New Features in JDK 16」等の記事 • InfoQ Javaニュース https://www.infoq.com/jp/java/news/ 「Javaニュース総まとめ」の記事(日本語) 2021-08-28 LL2021 Language Update - Java 20

Notes de l'éditeur

  1. 本日はプログラミング言語Javaの、この数年間の更新状況をお話しします。 Java読書会BOFのメンバーである岩室さんと代表の高橋で対談形式で進めます。
  2. Java読書会BOFは、毎月1回Javaに関する技術書籍の読書会を開催しています。 1998年より、通算で267回、現在39冊を読み終わったところです。 この3年間で読んだ本はこちらになります。 この中には英語の書籍が2冊ありますが、Javaの新しい機能について日本語の書籍があまりないため採用しました。 岩室さんは、2005年頃より参加している読書会BOFの常連メンバーで、お仕事でもJavaを使っています。簡単にJavaとの関わりなどを紹介いただきます。岩室さんよろしく。 □岩室さん ありがとうございます。 私、高橋は、1998年から参加し、現在代表を務めています。
  3. 本日は、この3年ほどのJavaにおけるアップデートについて、概要、言語仕様、標準ライブラリ、実行環境であるランタイム、そしてツールの観点からお話しします。
  4. Javaのアップデートの概要を、Javaの最初のアルファ版がリリースされた1995年から2021年までの間でメジャーバージョンアップされた年を示しています。 ここで、Java 6からリリース間隔が長く延びて、なかなか新しい機能がリリースされないという時代が続きました。 そこで、Java 9からは半年毎にメジャーバージョンアップを行い、新機能が順次リリースされるようになりました。 頻繁なバージョンアップに対して、3年毎に1つLTS版を指定し、長期サポートを提供します。LTSでないメジャーバージョンは、次のメジャーバージョンがリリースされた時点でサポート終了となります。
  5. こちらは、セキュリティ企業のSnyk(スニーク)がAzul社と共同で調査した、製品に使用しているJDKのバージョンの調査結果です。 長期間サポートが提供されている JDK 8 と、LTS版である JDK 11 が圧倒的に多いです。また、調査時点で最新の非LTS版である JDK 15 もそこそこ使われています。 岩本さんは、仕事ではどのバージョン使っていますか?  □岩本さん
  6. Javaのバージョンには、仕様であるJava SEバージョンと、開発・実行環境としてJava SEを実装したJDKバージョンとがあります。 JDKについては、OpenJDKコミュニティによりGPLv2クラスパス例外ライセンスでオープンソース開発されているOpenJDKが主流です。 このOpenJDKソースを、Oracle社を初め他の組織がビルドしたOpenJDKバイナリが有償あるいは無償で提供されています。 Linuxに倣って、OpenJDKディストリビューションと呼ばれています。 □岩室さん GPLv2クラスパス例外について語る
  7. 主なOpenJDKディストリビューションを示しています。 Oracle他、Eclipse、Azul Systems、Red Hat、Amazon、BellSoft、Microsoft、SAPなどがOpenJDKディストリビューションを提供しています。 なかには、JDK 11以降はOpenJDKから分離されたGUIライブラリのJavaFXを同梱しているものもあります。 これだけ選択肢が多いのはいいことと思いますが、Javaに習熟していないプログラマーにとっては、どれを使えばよいか悩ましいかもしれません。
  8. こちらは、開発者が製品に使用しているOpenJDKディストリビューションの調査結果です。 これによると、一番回答の多かったのが AdoptOpenJDKです。 次に、OracleのOpenJDKビルドおよび商用ライセンスのOracle JDKが続きます。 岩室さんは、どのOpenJDKディストリビューションを使っていますか? □岩室さん 高橋は、JavaFXというGUIライブラリを好んで使うので、OpenJDKディストリビューションのうち、JavaFXを組み込んで提供しているAzul社のZulufxやBellSoft社のLibericaJDKを使うことが多いです。
  9. では、続きまして言語仕様のアップデートについてお話します。 Java 11の後、主要な言語仕様の更新はこの5項目になります。数値は、正式導入されたメジャーバージョンを示します。
  10. Javaにはもともとswitch文がありましたが、新たに式として導入されました。 複数条件の列挙、break文不要などの特徴があります。
  11. テキストブロックにより、改行、インデントを含む長い文字列を簡単に記述できるようになりました。 ソースコードのインデントの中に複数行のテキストを自然に記述し、そのテキストに不要なインデントを含まないようにすることができます。 テキストブロックの各行の先頭にある空白は取り去ることができます。
  12. 例えば ShapeというタイプをRectangleというサブタイプにキャストする、いわゆるダウンキャストをしたいとします。 その際は、instanceof 演算子でキャストが可能かを検査し、キャスト演算子でキャストする必要がありました。 今回は、instanceof演算子のオペランドにパターン変数が追加され、パターン変数はキャストせずに使用することができるようになりました。 キャストの記述はそれなりに面倒で、コードも読みにくいので、すっきり書けるのがメリットです。 他の言語だと、もっとすっきり書けるそうですが、岩室さんこめんとありますか? □岩室さん
  13. Javaでは、データを抱える構造体のようなクラスを記述する際は、データをフィールドとして定義し、フィールドに値をセットするコンストラクタ、フィールドの値を読み出すgetterメソッド、そして2つの変数が値が同じ値かどうかを判定するequalsメソッドやハッシュコンテナに格納する際にハッシュ値を返すhashCodeメソッド、文字列化するtoStringメソッドを実装するのがお約束です。 record型は、この構造体のようなクラスにおいてお約束の実装をすべてコンパイラ任せにしてソースコードは必要最小限の記載とするとこができます。 余談 equals, hashCode, toString のメソッドはバイトコード上 invokedynamic で実装
  14. アクセス可能なインタフェースやクラスを実装・継承することができますが、設計によっては特定の型にのみ実装・継承させ、それ以外の型にはさせたくないことがあります。 シールクラスでは、実装・継承する型を予め指定することでそれ以外の型には実装・継承させない仕組みが可能となります。 岩室さん、ここまでの言語仕様で、これは!というものはありましたでしょうか? □岩室さん 高橋は、シールクラスがいいなと思いました。過去に複数組織で開発した際に、APIとしてJavaのインタフェースで定義し、実装を隠蔽して提供していたのですが、なんとそのインタフェースを利用側のクラスが実装しており、後日インタフェースにメソッドを追加した際、利用者のビルドが壊れるということがありました。
  15. 標準ライブラリのアップデートは、メソッドの追加を含むと、かなり多数あります。 ここでは、あると便利だなというメソッドの追加、新しいクラスの追加といった比較的大きなモノを抜粋しました。 岩室さん、気になるAPIはありましたか? □岩室さん
  16. Javaのランタイムに関するアップデートです。 まず、CDSと略されるクラスデータ共有の機能が入っています。これは、Javaの起動時間短縮とフットプリント削減につながる機能です。 次に、新しいGCが2種追加されています。これまでのGCはヒープが大きくなるほどGCによる停止時間が増加してしまいました。 新たなGCは、アプリケーションスレッドを止めなければならないGC処理を削減し、大きなヒープでもGCによる停止時間を小さくしています。 また、CMS GCは削除されました。 JavaScriptエンジン Nashornが削除されました。NashornはECMAScript 6までの対応で更新が困難になったこともあり削除となりました。 CPUの対応では、SPARCプロセッサ対応がなくなってしまいました。一方、WindowsとmacOSでARMプロセッサ対応が追加されています。
  17. OpenJDKに標準で含まれているツールです。 javadocはソースファイルのコメントからAPIリファレンスをHTML形式で生成するツールです。古いHTML4およびHTMLフレームで生成する機能が削除されました。 pack200は、JavaのクラスファイルをアーカイブするJARファイルに特化して圧縮する機能です。 jpackageは次のスライドで紹介します。
  18. jpackage は、Javaプログラムとその実行環境を一纏め、インストーラ形式にまとめるツールです。 インストーラ形式は、OS固有の形式を選ぶことができます。 あらかじめJava実行環境を入れていないマシンでも、プログラムをインストールすれば実行可能となります。 Javaの実行環境も一緒にインストールするなら、サイズは大きいの?と思いますが プログラムが必要とするモジュールを抜粋したものになるので配布サイズは小さくなります。 ここで、GUIにHello Worldを表示するプログラムをJavaとElectronで作成し、開発ディレクトリのビルド後のサイズ、配布ファイルのサイズ、インストール後に展開したディレクトリのサイズを比べます。
  19. 統合開発環境 IDE の最近の人気度を見てみます。 1位はIntelliJ IDEAで、続いてEclipse、そして最近人気が上がっているVisual Studio Codeが続きます。 岩室さん、どのIDEを使っていますか? どんな点を気に入っていますか? □岩室さん Visual Studio Codeは、Java Extension Packを入れると、コード補完、プロジェクト作成、リファクタリング機能、デバッグなどができるようになり、エディタというよりIDEに近い機能となっていました。
  20. Javaの最新情報をウォッチするなら、このあたりがよいです。 Oracleが出すオンラインJavaMagazineの記事で、一部日本語訳もあります。 次にOpenJDKディストリビューションを出しているAzul社のJavaアップデート情報です。 そして、InfoQのJavaニュースがあります。 最後にJavaアップデートについてどうでしょうか? □岩室さん