Submit Search
Upload
Head toward Java 16 (Night Seminar Edition)
•
1 like
•
538 views
Yuji Kubota
Follow
Slide for Java Japan User Group Night seminar.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 32
Download now
Download to read offline
Recommended
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
Yuji Kubota
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
Catch up Java 12 and Java 13
Catch up Java 12 and Java 13
Yuji Kubota
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
Yuji Kubota
Advanced database monitoring in modern java
Advanced database monitoring in modern java
Chihiro Ito
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
Recommended
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
Yuji Kubota
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
Catch up Java 12 and Java 13
Catch up Java 12 and Java 13
Yuji Kubota
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
Yuji Kubota
Advanced database monitoring in modern java
Advanced database monitoring in modern java
Chihiro Ito
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
Yuji Kubota
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
bitter_fox
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
Yasumasa Suenaga
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介
Shinya Takebayashi
Java9新機能概要
Java9新機能概要
HonMarkHunt
Java EE8 Report
Java EE8 Report
Norito Agetsuma
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
Yuji Kubota
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
Yuji Kubota
Microblaze loader
Microblaze loader
Takefumi MIYOSHI
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
NTT DATA Technology & Innovation
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
Yuji Kubota
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所
Takahiro YAMADA
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
Apache Torqueについて
Apache Torqueについて
tako pons
Ptt391
Ptt391
Takefumi MIYOSHI
More Related Content
What's hot
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
Yuji Kubota
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
bitter_fox
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
Yasumasa Suenaga
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介
Shinya Takebayashi
Java9新機能概要
Java9新機能概要
HonMarkHunt
Java EE8 Report
Java EE8 Report
Norito Agetsuma
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
Yuji Kubota
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
Yuji Kubota
Microblaze loader
Microblaze loader
Takefumi MIYOSHI
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
NTT DATA Technology & Innovation
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
Yuji Kubota
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所
Takahiro YAMADA
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
What's hot
(20)
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
Heap statsfx analyzer
Heap statsfx analyzer
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
Java 9で進化する診断ツール
Java 9で進化する診断ツール
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介
Java9新機能概要
Java9新機能概要
Java EE8 Report
Java EE8 Report
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
Microblaze loader
Microblaze loader
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Similar to Head toward Java 16 (Night Seminar Edition)
Apache Torqueについて
Apache Torqueについて
tako pons
Ptt391
Ptt391
Takefumi MIYOSHI
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
Driverについて
Driverについて
幸雄 村上
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
Google App Engine for Java
Google App Engine for Java
Takuya Tsuchida
R5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
Yusuke Tochigi
scala+liftで遊ぼう
scala+liftで遊ぼう
youku
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
Yuki Morishita
JSUG勉強会 2018年その5 Spring I/O 報告会
JSUG勉強会 2018年その5 Spring I/O 報告会
Alisa Sasaki
Rx java x retrofit
Rx java x retrofit
Shun Nakahara
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
Takayuki Shimizukawa
TDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
Similar to Head toward Java 16 (Night Seminar Edition)
(20)
Apache Torqueについて
Apache Torqueについて
Ptt391
Ptt391
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Driverについて
Driverについて
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Google App Engine for Java
Google App Engine for Java
R5 3 type annotation
R5 3 type annotation
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
scala+liftで遊ぼう
scala+liftで遊ぼう
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
JSUG勉強会 2018年その5 Spring I/O 報告会
JSUG勉強会 2018年その5 Spring I/O 報告会
Rx java x retrofit
Rx java x retrofit
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
TDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
More from Yuji Kubota
Head toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15 #LINE_DM
Yuji Kubota
Head toward Java 14 and Java 15
Head toward Java 14 and Java 15
Yuji Kubota
オンライン会議と音声認識
オンライン会議と音声認識
Yuji Kubota
Introduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjug
Yuji Kubota
Project Jigsaw #kanjava
Project Jigsaw #kanjava
Yuji Kubota
Java 9 and Future #jjug
Java 9 and Future #jjug
Yuji Kubota
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Yuji Kubota
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
jcmd #javacasual
jcmd #javacasual
Yuji Kubota
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Yuji Kubota
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
Yuji Kubota
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUG
Yuji Kubota
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
Yuji Kubota
JVM のいろはにほ #javajo
JVM のいろはにほ #javajo
Yuji Kubota
HeapStats: Troubleshooting with Serviceability and the New Runtime Monitoring...
HeapStats: Troubleshooting with Serviceability and the New Runtime Monitoring...
Yuji Kubota
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Yuji Kubota
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
Yuji Kubota
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
Yuji Kubota
29 Tips in 40 Minitues for GlassFish Fans #glassfishjp
29 Tips in 40 Minitues for GlassFish Fans #glassfishjp
Yuji Kubota
More from Yuji Kubota
(19)
Head toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15
Head toward Java 14 and Java 15
オンライン会議と音声認識
オンライン会議と音声認識
Introduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjug
Project Jigsaw #kanjava
Project Jigsaw #kanjava
Java 9 and Future #jjug
Java 9 and Future #jjug
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Unified JVM Logging
Unified JVM Logging
jcmd #javacasual
jcmd #javacasual
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUG
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
JVM のいろはにほ #javajo
JVM のいろはにほ #javajo
HeapStats: Troubleshooting with Serviceability and the New Runtime Monitoring...
HeapStats: Troubleshooting with Serviceability and the New Runtime Monitoring...
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
29 Tips in 40 Minitues for GlassFish Fans #glassfishjp
29 Tips in 40 Minitues for GlassFish Fans #glassfishjp
Recently uploaded
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
Recently uploaded
(9)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
Head toward Java 16 (Night Seminar Edition)
1.
HeadtowardJava16(NightSeminarEdition) KUBOTAYuji SBISecuritySolutions JJUGNightSeminar(2021/Mar/16)
2.
KUBOTAYuji(@sugarlife) ManagerofAWSinfrastructureteamatSBISecuritySolutions We'rehiring! https://www.sbisecsol.com/ OpenJDKAuthor/IcedTeacommitter JavaOne2014/2016/2017,WEB+DB「DivetoJava」(2018-19) https://www.slideshare.net/YujiKubota/
3.
今⽇話すこと Java16の新機能と変更点 主にAPI以外のVM機能 話さないこと ⾮互換性 APIの細かい変更点 http://cr.openjdk.java.net/~iris/se/16/latestSpec/apidiffs/overview-summary.html
4.
References bugs.openjdk.java.net(通称JBS,b.o.j.n) JEPsforJava16 CSRsforJava16 https://github.com/openjdk/jdk
5.
Glossary(1/2) JEP(JDKEnhancement-Proposal) JEP1で定義されているJava新機能拡張の提案 CSR(Compatibility&SpecificationReviews) ⾮互換性を伴う変更のレビュー(⾮互換性を伴う変更は出す必要がある) Releasenote 各製品ごとの変更点。OpenJDKやOracleJDKで書かれている内容がすべての製品にあてはま るわけではないのことに注意 OpenJDK:JBS OracleJDK:https://www.oracle.com/java/technologies/javase/jdk-relnotes-index.html
6.
Glossary(2/2) Incubator(JEP11) JavaAPIの試験⽤モジュール( jdk.incubator )。標準化に向けてフィードバックを得て変更 しやすいように特別なモジュールにしている 有効にするには
--add-modules jdk.incubator.xxx の指定が必要 Preview(JEP12) Java⾔語やJVMの試験機能。有効にするには --enable-preview の指定が必要。コンパイ ル時には --resource か -source の指定も必要 Standard 上記のテストフェーズを通じて標準機能に昇格した機能。通例は2回(例:Preview->Second Preview->Standard)で昇格しているが、Foreign-MemoryAccessAPIのように3回⽬を迎え るのもある
7.
Java16 17JavaEnhancement-Proposals Projectpage:https://openjdk.java.net/projects/jdk/16/ JBS 172Compatibility&SpecificationReviews JBS
8.
Ecosystemchanges 347:EnableC++14LanguageFeatures 357:MigratefromMercurialtoGit 369:MigratetoGitHub 386:AlpineLinuxPort@kisさん担当、以下@kisと記載 388:Windows/AArch64Port@kis
9.
347:EnableC++14LanguageFeatures ⽬的:C++14機能を利⽤して効率よくJDKを実装できるようにする 背景:JDKやJVMはC++で実装されているが機能はC++98/03に⻑らく限定されていた。JDK 11から新しいバージョンでの「ビルド」はサポートされ始めたが、⾔語機能の利⽤⾃体は許 可されていなかった ちなみにHotSpot(JVM実装)とJDK実装ではこのルールが異なり、HotSpotの実装ではビルド ルールでC++exceptionsは利⽤できないようにされている Java利⽤者にとっては特に影響なし
10.
357:MigratefromMercurialtoGit ⽬的:OpenJDKをGitで管理する 背景:⻑らくOpenJDKはMercurial(hg)で管理されていたが開発者との親和性などの観点から Gitに移⾏を図った(使いづらい、開発者を呼び込みたい、など) バージョン管理やコミットメッセージのリフォーマット、各種チェッカー(jcheck)やレビュー ツール(webrev)などの移植が⾏われた 既存Mercurialリポジトリ(hg.openjdk.java.net)は積極的に廃棄されず残る予定
11.
369:MigratetoGitHub ⽬的:OpenJDKをGitHubで管理する 背景:357と⼀緒。こちらは構成管理をどのプラットフォームで⾏うか リポジトリはhttps://github.com/openjdk/ 今までjava.netにあったレビューツールやチェッカーなどもGitHubエコシステムに移植 Bylaws(グループやプロジェクト、開発者のロール、ガバメントボードなどの原則)や Census(グループやプロジェクト、開発者、およびその関連性)は変わらない 課題管理やWikiなどのインフラも変わらずjava.net上のまま(いつでもGitHubから移⾏でき るように=影響を受けないように保つという⽬的もある)
12.
Language/APIchanges 338:VectorAPI(Incubator)@kis 380:Unix-DomainSocketChannels 389:ForeignLinkerAPI(Incubator) 390:WarningsforValue-BasedClasses 393:Foreign-MemoryAccessAPI(ThirdIncubator)@kis 394:PatternMatchingforinstanceof@kis 395:Records@kis 396:StronglyEncapsulateJDKInternalsbyDefault 397:SealedClasses(SecondPreview)@kis
13.
380:Unix-DomainSocketChannels(1/4) ⽬的:単⼀マシン上でのプロセス間通信に使⽤されるUnixDomainSocket( AF_UNIX )を標準 APIでサポート 背景:プロセス間通信はTCP/IP(ループバック接続)よりも効率的でセキュアな通信が⾏え、近 年Windowsでサポートされ始めた。これにより主要プラットフォームでサポートされたので 標準APIに⼊った。同⼀システム上のコンテナ間通信でも、共有ボリュームを利⽤することで Unix-DomainSocket利⽤が実現できる 効率的:Unix-DomainSocketはファイルシステムのパス名(
C:¥hoge , /hoge )を指定して通 信する。つまり、ループバックTCP/IPソケットではない=TCP/IPスタックを通らないので LatencyやCPU使⽤率が改善できる セキュア:➀ローカルアクセスは必要だがリモートネットワークアクセスが不要なのでリモー トアクセスを遮断できる➁プラットフォーム(Unix,Windows)のファイルシステムのアクセス 制御を適⽤できる
14.
380:Unix-DomainSocketChannels(2/4) 制約:➀UnixではサポートされているがWindowsでサポートされていない機能はこのJEPで対 応することはゴールとして設定されていない。今後JDKごとの固有オプションとして対応さ れる可能性がある。例えばPeercredentialsはUnix固有だが、ソケットオプション SO_PEERCRED がすでに対応されている。➁レガシーAPI( java.net.Socket
, java.net.ServerSocket )のサポートは⾏われていない。これはTCP/IP ( java.net.InetAddress )を前提に実装されているため
15.
380:Unix-DomainSocketChannels(3/4) import java.net.UnixDomainSocketAddress; import java.nio.ByteBuffer; import
java.nio.channels.ServerSocketChannel; import java.nio.file.Files; import java.nio.file.Path; import static java.net.StandardProtocolFamily.UNIX; public class Server { private static final Path SOCKETE_FILEPATH = Path.of("./", "testsocket"); public static void main(String... args) throws Exception { var address = UnixDomainSocketAddress.of(SOCKETE_FILEPATH); try (var serverChannel = ServerSocketChannel.open(UNIX)) { // INETかUNIXかを指定 serverChannel.bind(address); try (var clientChannel = serverChannel.accept()) { ByteBuffer buf = ByteBuffer.allocate(64); clientChannel.read(buf); buf.flip(); System.out.printf("Read %d bytesn", buf.remaining()); } } finally { Files.deleteIfExists(address.getPath()); // ソケットと独⽴してファイルが存在するので確実に消す } } }
16.
380:Unix-DomainSocketChannels(4/4) import java.net.UnixDomainSocketAddress; import java.nio.ByteBuffer; import
java.nio.channels.SocketChannel; import java.nio.file.Path; public class Client { private static final Path SOCKETE_FILEPATH = Path.of("./", "testsocket"); public static void main(String... args) throws Exception { var address = UnixDomainSocketAddress.of(SOCKETE_FILEPATH); try (var clientChannel = SocketChannel.open(address)) { ByteBuffer buf = ByteBuffer.wrap((args.length != 0 ? args[0] : "Hello world").getBytes()); clientChannel.write(buf); } } } ref:https://inside.java/2021/02/03/jep380-unix-domain-sockets-channels/
17.
389:ForeignLinkerAPI(Incubator)(1/2) ⽬的:ProjectPanama。ネイティブ実装をもっと楽に呼び出したい 背景:JNIめんどい .Nativeを呼び出すJava実装を書く private static
native int getpid() .headerファイルを作る javac -h . XXX.java .JNIAPIを使ってC実装を書く JNIEXPORT jint JNICALL Java_XXX_getpid(JNIEnv *env, jclass clas){...} .コンパイル cc -shared -o libmain.dylib -I $JAVA_HOME/include -I XXX.c .Java実装に動的ライブラリを読み込むコードを書く System.loadLibrary("XXX");
18.
389:ForeignLinkerAPI(Incubator)(2/2) import java.lang.invoke.*; import jdk.incubator.foreign.*; class
PanamaMain { public static void main(String[] args) throws Throwable { // System Linker取得、ネイティブシンボルのルックアップ var linker = CLinker.getInstance(); var lookup = LibraryLookup.ofDefault(); // C宣⾔のメソッドハンドル作成、関数記述⼦算出 var getpid = linker.downcallHandle( lookup.lookup("getpid").get(), MethodType.methodType(int.class), FunctionDescriptor.of(CLinker.C_INT)); // 実⾏ System.out.println((int)getpid.invokeExact()); } } $ java -Dforeign.restricted=permit --add-modules jdk.incubator.foreign PanamaMain.java ref.https://inside.java/2020/10/06/jextract/ より楽に:Cheaderファイルから上記相当の処理を⾏うJavaクラスをjextractで作成できる(サンプル集)
19.
390:WarningsforValue-BasedClasses(1/4) ⽬的:Value-BasedClassesの利⽤⽅法を制限する 背景: ProjectValhallaはprimitiveclassを活⽤してインライン表現が可能なようにプログラミングモデルを強化する JDK8からある"Value-BasedClasses(以降、値クラス)"もこの対象にしたい i.不変(可変オブジェクトへの参照は可) ii.インスタンス状態からのみ計算される equals ,
hashCode , toString 実装を持つ iii.インスタンスIDに依存した操作を使⽤しない( synchronized , == , hashCode ) iv. equals() のみに基づいて同等とみなす( == を利⽤した参照に基づく等価判定を⾏わない) v.公開されたコンストラクタを持たない(⼀意性に寄与しないファクトリメソッドで作成される) vi.同等な時は⾃由に置き換え可。インスタンスxとyが⽰す「値」が同じ時は⼊れ替えても変化なし 対象にするには以下のリスクが考えられる i. != の結果に依存しているコードが破壊される ii.コンストラクタ経由で Integer のようなpritimivewrapperclassのインスタンスを作っている場合は LinkageErrors が発⽣する iii.これらのクラスのインスタンスを同期処理( synchronized )させようとした場合例外が発⽣する というわけで警告を出して利⽤⽅法を制約しておきたい←本旨
20.
390:WarningsforValue-BasedClasses(2/4) i.については、値クラスはFactoryメソッドで⼀意性の保証はしておらず、仕様を無視した前 提のコードは⾃動的に検出も難しいのでスコープ外とする ii.については、Java9で既に⾮推奨化されておりコンストラクタが呼ばれていればデフォル トでコンパイル時( javac )に警告が出される iii.については、値クラスを対象に
synchronized ⽂を利⽤していた場合はコンパイル時に警 告が出るようになった また、実⾏時にも値クラスのインスタンス上での monitorenter が検出された場合、 - XX:DiagnoseSyncOnValueBasedClasses に 1 を設定していた場合はfatalエラーとして扱 い、 2 を設定した場合は警告がコンソールおよびJFRのイベント経由でロギングされるよう になった(注: UnlockDiagnosticVMOptions の設定も必要)
21.
390:WarningsforValue-BasedClasses(3/4) $ ./jdk-16.jdk/bin/javac ValueBased.java ValueBased.java:5:
警告:[synchronization] 値ベース・クラスのインスタンスで同期しようとしました synchronized (valueBased)) { ^ 警告1個 $ ./jdk-16.jdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=1 ValueBased # # A fatal error has been detected by the Java Runtime Environment: # # Internal Error (synchronizer.cpp:416), pid=71724, tid=11267 # fatal error: Synchronizing on object 0x00000007bfe78198 of klass java.lang.Long at ValueBased.main(ValueBased.java:5) :(snip) $ ./jdk-16.jdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=2 ValueBased [0.101s][info][valuebasedclasses] Synchronizing on object 0x00000007bfe78198 of klass java.lang.Long [0.101s][info][valuebasedclasses] at ValueBased.main(ValueBased.java:5) [0.101s][info][valuebasedclasses] - locked <0x00000007bfe78198> (a java.lang.Long) :(snip)
22.
390:WarningsforValue-BasedClasses(4/4) 実現するために、対象クラスに @jdk.internal.ValueBased アノテーション追加 java.lang.{Integer,Long,Short,...}
(primitivewrapperclass) java.lang.Runtime.Version java.util.{Optional,OptionalInt,OptionalLong,OptionalDouble} java.time.{Instant,LocalDate,LocalTime,...} , java.time.chrono.MinguoDate,HijrahDate,... java.lang.ProcessHandle (+実装クラス) java.util のcollectionファクトリー実装クラス java.util.List.{of,copyOf} java.util.Map.{of,copyOf,ofEntries,entry}
23.
396:StronglyEncapsulateJDKInternalsbyDefault ⽬的: sun.misc.Unsafe を含む重要なAPIを除くJDK内部実装へのアクセスを原則不可 背景:JDK9で実施されたモジュール化に伴い、外部利⽤を意図していない内部実装へのアク セスを不可にしてメンテナンスコストを下げたい。しかし、代替不可能かつ依存しているラ イブラリが多い
sun.misc.Unsafe のような内部実装もあり、⼀律して全てを不可にするこ とは難しいという状態が続いている JEP261から導⼊された --illegal-access のデフォルト値が permit (最初のリフレクティ ブアクセス時に警告がでるが原則許可)から deny ( --add-opens オプションなどを⽤いて明 ⽰的に許可してない限りアクセス不可)へ変更。 jdeps コマンドを使って依存モジュールを確 認して適切にアクセス設定を⾏いましょう
24.
JVMchanges 376:ZGC:ConcurrentThread-StackProcessing 387:ElasticMetaspace
25.
376:ZGC:ConcurrentThread-StackProcessing(1/3) ⽬的:スレッドスタック処理をsafepointから並⾏フェーズに移⾏することで、ZGCの STW(StopTheWorld)を更に減らす 背景:次ページ 利点:ZGCを使っている場合、何もせず⾼速化する可能性がある
26.
376:ZGC:ConcurrentThread-StackProcessing(2/3) 背景(1):GCがなぜSTWを必要としているか GCは各ヒープオブジェクトへのポインタに関する情報が必要 これはJITコンパイラによって作成されたオブジェクトマップ(OopMap)に含まれる JITによってコンパイルされた各メソッドは、特定の場所にOopMapを記録し、スタックとレジスタのどの場所が参 照されてるかを記録する GCは、スタックをスキャンするときにこれらのOopMapを照会して、参照するポインタがどこにあるかを把握する GC時に各スレッドがポインタを触っていると予期せぬ領域に対して処理が⾛る可能性があるので、そのような (unsafeな)スレッドはサスペンドする必要がある 各スレッドにsafepointに関する状態と遷移時の処理を持たせてlockすることで、GCなどのVMThread処理 (vmoperation)を⾏う際に各スレッドをblockする(そしてVMThreadがsafepointにて処理を⾏う) 結果的に各Javaスレッドが⽌まってる状態なので"vmoperation≒ safepoint≒ STW"となっている
27.
376:ZGC:ConcurrentThread-StackProcessing(3/3) 背景(2):ZGCにおけるSTW 元々ZGCはマーキング処理などヒープサイズやメタスペースサイズに応じて増⼤化する GC処理を、safepointでの操作から追い出して並⾏フェーズ(JavaスレッドとGCスレッ ドを並⾏に処理)に移⾏させることでヒープサイズに関わらず1ミリ秒のSTWを達成して きた ルート処理などの⼀部がまだsafepointで⾏われている。ルートオブジェクト数はヒープ サイズ依存ではないが、主にスレッド数などに依存するので⼤規模アプリでは問題にな りえる stackwatermarkbarrierを利⽤してGCがすべてのスレッドスタックと他のスレッドルー トを処理をしている際にJavaスレッドがフレームに戻らないように整合性を確保するこ とで並列化を実現 将来的に他GCへの転⽤が望める
28.
387:ElasticMetaspace ⽬的:Metaspaceのフラグメンテーションやメモリフットプリントなどを改善 背景:Metaspaceはヒープ外メモリを多く消費するケースがある メタデータは通常、クラスがロードされたときに確保され、その⽣存期間はクラスローダーに依存する Metaspaceのチャンクはアロケーション操作を効率的に⾏うため粒度が粗い クラスローダが回収されるとMetaspaceのチャンクは後で再利⽤するためにフリーリストに配置される 結果、頻繁にクラスローディングとアンローディングを⾏うアプリケーションは、⼤量の使わないスペースを Metaspaceのフリーリスト内に蓄積してしまう→ここをどうにかしたい ⽅法:メモリアロケータをKernelなどでも利⽤されているbuddyallocationに置き換え より⼩さなチャンクでメタスペースメモリを割り当てられるようになり、クラスローダのオーバーヘッドを減 らせる 同様にフラグメンテーションが減らせ、未使⽤のメタスペースメモリをより迅速にOSに戻せるようになる(※ 元々断⽚化されてなかったらOSに返す) 利点:何もせずにJavaアプリケーションのメモリ使⽤量が改善 ref.https://cr.openjdk.java.net/~stuefe/JEP-Improve-Metaspace-Allocator/review-guide/review-guide-1.0.html
29.
Toolchanges 392:PackagingTool
30.
392:PackagingTool ⽬的:JDK14で⼊った jpackage (JEP343)が標準機能化 背景:各プラットフォーム間で共通のインストーラー⽣成ツールがなかったので作られた。こ れからは
jlink でカスタムランタイムイメージを作り、 jpackage でインストーラーを作 ってユーザに提供する流れが⼀般的に(なるかもしれない) JDK14からの変更点は --bind-services オプションが --jlink-options に変わっただけ
31.
Basicusage $ jpackage --name
sample --input <directory_includes_jar> --main-jar sample.jar --main-class Sample $ ls sample-* sample-1.0.dmg Withcustomruntimeimage: # Show ependent modules $ jdeps -summary Sample.class Sample.class -> java.base Sample.class -> java.desktop # Create runtime image that consists only of dependent modules $ jlink --add-modules java.base,java.desktop --output image # Create installer with custom runtime image $ jpackage --name sample --input <directory_includes_jar> --main-jar sample.jar --main-class Sample --runtime-image image
32.
HeadtowardJava16(NightSeminarEdition) KUBOTAYuji SBISecuritySolutions JJUGNightSeminar(2021/Mar/16)
Download now