Contenu connexe
Similaire à Prepare for Java 9 #jjug (20)
Prepare for Java 9 #jjug
- 1. Prepare for Java 9
Java 9 備え う
KUBOTA Yuji @sugarlife kubota.yuji@gmail.com
NTT OSS Center
2016/Dec/03
Copyright©2016 NTT corporation
- 2. 2
•大 新機能
• 入 背景 解決 課題
•コ 影響 (可能性 )あ 変更≒非互換性
• 変更
• 非推奨化
•削除 / 廃
• 内部処理変更 / 様化 い い処理 変更
Prepare for Java 9
Copyright©2016 NTT corporation
セ ョン 話
- 3. 3
• 日 話 Java 9 式
前 変わ 可能性 あ
注意点
Copyright©2016 NTT corporation
- 4. 4
• JavaOne2016 (9/18-22)
• [O] Java 8 非推奨 ョン Java 9 動 い
Perm 代表例 !
• JavaOne 報告会 東京 (10/15)
• [私] (コ &動作確認 ) 通 使わ い
う 注意 !
• JDK-8167446: Add back PermSize and
MaxPermSize (10/19)
実例 1
Copyright©2016 NTT corporation
完全無視 手直 必要 変わ せ
- 5. 5
• JavaOne2016 (9/18-22)
• [O] Java 8 非推奨 ョン Java 9 動 い
Perm 代表例 !
• JavaOne 報告会 東京 (10/15)
• [私] (コ &動作確認 ) 通 使わ い
う 注意 !
• JDK-8167446: Add back PermSize and
MaxPermSize (10/19)
実例 1
Copyright©2016 NTT corporation
完全無視 手直 必要 変わ せ
- 6. 6
• 表示
•JavaOne 2015: java -listmods
•JavaOne 2016: java --list-modules
• 以外 ョン FB け 変わ
•
•CMS GC 非推奨, AOT Compiler, …
実例 2
Copyright©2016 NTT corporation
Feature Complete (2016/5/26) 何
- 7. 7
•発表当日 深夜-朝 新 Java 9 入 新機
能 (JEP) (少 く 2 ) 追加
• JEP 11: Incubator Modules
•JEP 299: Reorganize Documentation
•大 新機能 / 非互換性 内
容 い 触 せ
実例 3
Copyright©2016 NTT corporation
直前 キ
- 8. 8
Disclaimer: who I am
Copyright©2016 NTT corporation
発表時 自己紹 あ せ 本資
料 人 書い い 質問 Twitter 等 う !
KUBOTA Yuji (@sugarlife), hard-of-hearing
kubota.yuji@gmail.com
OpenJDK Technical Support Engineer in NTT
OpenJDK Author (ykubota)
IcedTea Committer
- 11. 11
•GA release schedule (ML 投票 決定)
• 2017/7/27 ( ← 2017/3/23 ← 2016/9/23 )
•JEP: 87 89 個 (openjdk.java.net/projects/jdk9)
• 機能 ( 様策定 参照実装)
•JSR 379: Java SE 9 Release Contents
•JCP 様承認
概要
Copyright©2016 NTT corporation
様策定 JCP 役目 , JEP ML 策定
- 15. 15
•JAR HELL
• 依 性 複雑怪奇
•標準
• 巨大 分割 可
Project Jigsaw
Copyright©2016 NTT corporation
Project Jigsaw 解決 う い 課題 い
- 17. 17
•紛失 ?
•コン 発生?
→依 性 定義 い 問題
•内部 API 安全 変更 ?
→公開制限 定義 い 問題
依 性 複雑怪奇
Copyright©2016 NTT corporation
依 性 複雑怪奇 何 問題
- 18. 18
•紛失 ?
•コン 発生?
→依 性 定義 い 問題
•内部 API 安全 変更 ?
→公開制限 定義 い 問題
•解決策: Module 入
依 性 複雑怪奇
Copyright©2016 NTT corporation
依 性 複雑怪奇 何 問題
- 24. 24
Module
Copyright©2016 NTT corporation
依 性 定義方法
JAR
module com.foo.bar {
//依
requires com.foo.baz;
requires java.sql;
}
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
module-info.java
依 性
- 25. 25
Module
Copyright©2016 NTT corporation
公開制限 定義方法
JAR
module com.foo.bar {
//依
requires com.foo.baz;
requires java.sql;
//公開 to 公開先
exports com.foo.bar.alpha;
exports com.foo.bar.beta to
com.foo.ok;
}
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
module-info.java
依 性
公開制限
- 27. 27
Standard library
Copyright©2016 NTT corporation
標準 巨大 いう問題 化 解決
localhost /jdk9# ./bin/java --list-modules
java.activation (file:///jdk9/modules/java.activation/)
java.annotations.common
(file:///jdk9/modules/java.annotations.common/)
java.base (file:///jdk9/modules/java.base/)
java.compact1 (file:///jdk9/modules/java.compact1/)
java.compact2 (file:///jdk9/modules/java.compact2/)
java.compact3 (file:///jdk9/modules/java.compact3/)
java.compiler (file:///jdk9/modules/java.compiler/)
java.corba (file:///jdk9/modules/java.corba/)
:
- 29. 29
Standard library
Copyright©2016 NTT corporation
jdeps コ ン 依 い 確認
localhost /jdk9# ./bin/jdeps /tmp/heapstats-analyzer.jar
heapstats-analyzer.jar -> java.base
heapstats-analyzer.jar -> java.datatransfer
heapstats-analyzer.jar -> java.desktop
heapstats-analyzer.jar -> java.logging
heapstats-analyzer.jar -> java.management
heapstats-analyzer.jar -> java.rmi
heapstats-analyzer.jar -> not found
jp.co.ntt.oss.heapstats -> java.io java.base
jp.co.ntt.oss.heapstats -> java.lang java.base
jp.co.ntt.oss.heapstats -> java.lang.invoke java.base
:
- 30. 30
Standard library
Copyright©2016 NTT corporation
見当 い not found
localhost /jdk9# ./bin/jdeps /tmp/heapstats-analyzer.jar
heapstats-analyzer.jar -> java.base
heapstats-analyzer.jar -> java.datatransfer
heapstats-analyzer.jar -> java.desktop
heapstats-analyzer.jar -> java.logging
heapstats-analyzer.jar -> java.management
heapstats-analyzer.jar -> java.rmi
heapstats-analyzer.jar -> not found
jp.co.ntt.oss.heapstats -> java.io java.base
jp.co.ntt.oss.heapstats -> java.lang java.base
jp.co.ntt.oss.heapstats -> java.lang.invoke java.base
:
OpenJDK JavaFX
含 い い not found
jp.co.ntt.oss.heapstats -> javafx.application not found
jp.co.ntt.oss.heapstats -> javafx.collections not found
- 31. 31
Standard library
Copyright©2016 NTT corporation
標準 化 一
localhost /jdk9# ./bin/jdeps /tmp/heapstats-analyzer.jar
heapstats-analyzer.jar -> java.base
heapstats-analyzer.jar -> java.datatransfer
heapstats-analyzer.jar -> java.desktop
heapstats-analyzer.jar -> java.logging
heapstats-analyzer.jar -> java.management
heapstats-analyzer.jar -> java.rmi
heapstats-analyzer.jar -> not found
jp.co.ntt.oss.heapstats -> java.io java.base
jp.co.ntt.oss.heapstats -> java.lang java.base
jp.co.ntt.oss.heapstats -> java.lang.invoke java.base
:
OpenJDK JavaFX
含 い い not found
jp.co.ntt.oss.heapstats -> javafx.application not found
jp.co.ntt.oss.heapstats -> javafx.collections not found
jlink コ ン 必要最低限 構
成 実行可能 java 作成
- 32. 32
•何 嬉 い
• 足 /コン 調査 簡易化
• 柔軟 セ 制限
• 標準 縮 圧縮
•備え ?
• ビ 利用 対応 学 う
Project Jigsaw
Copyright©2016 NTT corporation
ョン 変わ 可能性 あ う暫く
- 34. 34
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
/jdk9/bin# ./jshell
| Welcome to JShell -- Version 9-internal
| For an introduction type: /help intro
jshell>
- 35. 35
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
/jdk9/bin# ./jshell
| Welcome to JShell -- Version 9-internal
| For an introduction type: /help intro
jshell> import java.time.*
jshell>
- 36. 36
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
/jdk9/bin# ./jshell
| Welcome to JShell -- Version 9-internal
| For an introduction type: /help intro
jshell> import java.time.*
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
- 37. 37
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
/jdk9/bin# ./jshell
| Welcome to JShell -- Version 9-internal
| For an introduction type: /help intro
jshell> import java.time.*
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
| created class Java9
- 38. 38
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
| created class Java9
jshell>
- 39. 39
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
| created class Java9
jshell> new Java9()
- 40. 40
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
| created class Java9
jshell> new Java9()
$3 ==> Java9@56235b8e
jshell>
- 41. 41
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
| created class Java9
jshell> new Java9()
$3 ==> Java9@56235b8e
jshell> $3.releaseDate()
- 42. 42
•REPL (Read-eval-print loop) for Java
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell> public class Java9 {
...> public void releaseDate() {
...> LocalDateTime d = LocalDateTime.of(2016,9,23,0,0);
...> System.out.println(d.plusMonths(6+4).plusDays(4));
...> }
...> }
| created class Java9
jshell> new Java9()
$3 ==> Java9@56235b8e
jshell> $3.releaseDate()
2017-07-27T00:00
- 43. 43
•何 嬉 い
• く API 試せ
•教育用 役立
• CLI framework
• https://github.com/YaSuenag/jmxclient
•備え ?
• 簡単 検討 CLI 利用
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell 色々 う ?
- 46. 46
•JavaDoc.Next
•HTML 5
•Doclint, Doclet API 改善
•検索機能 追加
•JDK release
• javac --release コン
•Multi-release jar files (META-INF/version/{9,10,…})
新機能
Copyright©2016 NTT corporation
二 Project 以外 新機能 あ
javac --release N = javac -target N -source N .
-bootclasspath=/path/to/N/rt.jar
- 47. 47
•HTTP 2.0 / The Flow API / …
•性能改善
• Re-engineering javac (Tiered Attribution)
• “String” + “String” (invokedynamic 利用)
•Stream / Collection 改善
• 匿 ン 演算子
• Static 追加 ({List,Set,Map}#of)
新機能
Copyright©2016 NTT corporation
新機能 改善 く一部 紹
- 49. 49
OpenJDK Developers’ Guide
•Don’t break binary compatibility (言語 様)
•Avoid introducing source incompatibilities
•Manage behavioral compatibility changes
http://cr.openjdk.java.net/~darcy/OpenJdkDevGuide/
互換性
Copyright©2016 NTT corporation
Binary > Source > Behavioral
- 50. 50
•JEP 227: Enhanced Deprecation
•@Deprecated
• 将来削除 (forRemoval)
• ョン 非推奨 (since)
•jdeprscan
•非推奨 API 利用
@Deprecated
Copyright©2016 NTT corporation
消え 消え 詐欺
- 52. 52
•大半 内部 API セ 化(隠蔽)
•JDK 9 コ ン ョン 回避 可能
•広く使わ い 物(Critical APIs) 代替 用
意 公開
•jdeps 使 影響あ 確認 推奨
• 特 Multi-Release JAR files (JEP 238)
JEP 260: Encapsulate most internal APIs
Copyright©2016 NTT corporation
特 利用 影響 け い 確認
- 53. 53
•Critical APIs (keep public)
• sun.misc.Unsafe
•sun.misc.{Signal,SignalHandler}
• sun.misc.Cleaner
•sun.reflect.Reflection::getCallerClass
• sun.reflect.ReflectionFactory
• 以外 削除(隠蔽) 例: sun.misc.Base64
JEP 260: Encapsulate most internal APIs
Copyright©2016 NTT corporation
Critical APIs JDK 10 以降 削除 可能性あ
- 54. 54
• 変更 以 組 廃
• Endorsed-standards override
•Extension mechanism
• -Xbootclasspath, -Xbootclasspath/p,
-Dsun.boot.class.path 削除
• AppClassLoader URLClassLoader ン ン
無く ( 承 い)等 影響
Change class loaders mechanism in JEP
261: Module System
Copyright©2016 NTT corporation
Module 化 配置 推奨 いう流
- 55. 55
•-source / -target 3 世代前 サ
•JDK 9 場合 1.6 1.5 drop
•drop 前 ョン 非推奨
•JDK 9 場合 1.6 非推奨 警告 出
JEP 182: Policy for Retiring javac –
source and –target options
Copyright©2016 NTT corporation
JDK 9 ビ JDK 5 動 人 居 い ?
- 56. 56
•-version: コ ン ン ョン削除
•-version く : 付く方
•JAR Manifest JRE-Version 削除
JEP 231: Remove Launch-Time JRE
Version Selection
Copyright©2016 NTT corporation
起動時 ョン指定 く
- 57. 57
•JDK 構造 変更
JEP 220: Modular Run-Time Images
Copyright©2016 NTT corporation
等 決 打 込 影響
- 58. 58
•javac --release Multi-Release JAR
• 自体 新機能
•前述 非互換性 合わせ ビ 多
大 影響 え
• Java 9 ン ビ 最新
化 必要
JEP 247: Compile for Older Platform Versions
JEP 238: Multi-Release JAR Files
Copyright©2016 NTT corporation
Maven:https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw
- 59. 59
•JDK 8 削除済 or 非推奨 ョン
使 場合 警告 セ 出 け
(無視 起動 )
•JDK 9 殆 場合起動 く
• JDK 8 非推奨 ョン 削除
• Perm 領域関係 残 無視 起動
Unrecognized VM options fail to start
Copyright©2016 NTT corporation
warning: ignoring option XXX; support was removed in 8.0
- 60. 60
•Property File UTF-8 利用可能
•ResourceBundle API UTF-8
込
•native2ascii 削除
•設定 込 ワ 工
夫 隠蔽 い 影響 現 う
JEP 226: UTF-8 Property Files
Copyright©2016 NTT corporation
う く UTF-8 対応 思い 動作等 変更
- 62. 62
•従来 JVM 廃 ョン
変更
•-Xlog:[<selection>]:[<output>]:[<decorators>]
•-Xlog:[出力内容]:[出力先]:[各行 装飾]
JEP 158: Unified JVM Logging
JEP 271: Unified GC Logging
Copyright©2016 NTT corporation
Parser 系 い い全滅
- 63. 63
•従来 JVM 廃 ョン
変更
•-Xlog:[<selection>]:[<output>]:[<decorators>]
•-Xlog:[出力内容]:[出力先]:[各行 装飾]
• -XX:+PrintGCDetails -Xloggc:gc.log.`date +%Y-
%m-%d_%H-%M-%S` -XX:+PrintGCTimeStamps
JEP 158: Unified JVM Logging
JEP 271: Unified GC Logging
Copyright©2016 NTT corporation
Parser 系 い い全滅
- 64. 64
•従来 JVM 廃 ョン
変更
•-Xlog:[<selection>]:[<output>]:[<decorators>]
•-Xlog:[出力内容]:[出力先]:[各行 装飾]
• -XX:+PrintGCDetails -Xloggc:gc.log.`date +%Y-
%m-%d_%H-%M-%S` -XX:+PrintGCTimeStamps
• -Xlog:gc*=debug:gc.log.%t:time,level
JEP 158: Unified JVM Logging
JEP 271: Unified GC Logging
Copyright©2016 NTT corporation
Parser 系 い い全滅
- 65. 65
• 以 組合せ
• DefNew + CMS / iCMS
•ParNew + SerialOld / iCMS
• CMS foreground(s)
• -XX:+UseCMSCompactAtFullCollection
• -XX:+CMSFullGCsBeforeCompaction
• -XX:+UseCMSCollectionPassing
JEP 214: Remove GC Combinations
Deprecated in JDK 8
Copyright©2016 NTT corporation
JDK 8 時点 非推奨 非サ
- 66. 66
• Parallel GC G1 GC
•-XX:+UseParallel(Old)GC 従来通
•CMS GC 非推奨化 議論 ML 進
い (JEP 291)
JEP 248: Make G1 the Default Garbage
Collector
Copyright©2016 NTT corporation
各 GC JJUG CCC {2014,2015} Fall 資料 参考
- 67. 67
•JEP 229: Create PKCS12 Keystores by Default
•keystore type JKS PKCS12 変更
•JEP 288: Disable SHA-1 Certificates
• X.509 証明書 ン SHA-1 署 利用 い
場合 注意
Improve encryption for security
Copyright©2016 NTT corporation
コ いう 利用 証明書 問題
- 69. 69
•JEP 289: Deprecate the Applet API
• java.applet.{AppletStub,Applet,AudioClip,Apple
tContext}
• javax.swing.JApplet
•Fix insecure issues
•Remove support for serialized applets (JDK-8074161)
• No longer allow non-strict JNLP Parsing (JDK-8075605)
Follow the evolution of WEB
Copyright©2016 NTT corporation
Web 動向(NPAPI) セキ 面 非推奨化 流
- 71. 71
• Toolkit implementers (JDK-8037739)
• java.awt.peer package
• java.awt.dnd.peer package
• Unsupported Apple APIs
• com.apple.eawt, com.apple.eio (JEP 272)
• com.apple.concurrent (JDK-8148187)
• AppleScript scripting engine (JDK-8143404)
• com.sun.codec.jpeg (JDK-8038838)
Removed APIs
Copyright©2016 NTT corporation
関係 多い
- 74. 74
• _ 1文 禁 (JDK-8061549)
• 排除 い
• JLS §15.27.1. Lambda Parameters (Java 8)
Disallow _ as a one-character identifier
by JEP 213: Milling Project Coin
Copyright©2016 NTT corporation
いい 前 授け う
- 75. 75
•String 化 一環 内部 (value)
型 char[] byte[] 変更
•1文 毎 2byte(UTF-16) 1byte 扱
え 1byte 以外 従来通
• 回避 内部 直接
け渡 意外 多い 注意
The value field of String is no longer
char[] by JEP 254: Compact Strings
Copyright©2016 NTT corporation
文 列 性能 永遠 課題
- 76. 76
•RMI HTTP proxy
•RMI/JRMP HTTP tunneling
実装 削除 (JDK-8155978)
The entire HTTP proxying mechanism of RMI
deprecated in JDK 8 will be removed
Copyright©2016 NTT corporation
前 ョン 非推奨化 削除 一環
- 79. 79
Good bye hprof by JEP 240
Copyright©2016 NTT corporation
[PR] heap profiler & visualizer HeapStats !
•hprof 提供 く
• 元々 JVM TI BCI コ あ 非公式扱
い
•コ HeapDump 機能 残
•HeapDump jcmd 等 代替 可能
- 80. 80
Good bye jhat by JEP 241
Copyright©2016 NTT corporation
[PR] heap profiler & visualizer HeapStats !
•jhat 提供停
•hprof 様 コ 残
• experimental あ 利用 少
• Eclipse MAT 代用可能
- 81. 81
•native2ascii
• JEP 226 UTF-8
利用可能
•VisualVM
•JDK 梱 く 公式サ
得 必要 あ (blogs.oracle.com/nbprofiler)
• https://blogs.oracle.com/java-platform-
group/entry/visual_vm_in_jdk_9
Good bye tools
Copyright©2016 NTT corporation
[PR] heap profiler & visualizer HeapStats !
- 82. 82
JEP 228: Add More Diagnostic Commands
Copyright©2016 NTT corporation
Domain Num. Abstract
PerfCounter 1 - Performance Counter
ManagementAgent 4 +1 JMX agent
Thread 1 - Thread dump
GC 8 +2
-1
Heap / GC / Finalization
VM 15 +8 Runtime info. (log/native mem/flag/etc.)
Compiler 7 - JIT Compiler
JVMTI 2 - JVMTI agent
Removed GC.rotate_log to VM domain
jcmd 機能 強化 (基本的 新機能)
- 83. 83
影響 あ う 変更
Copyright©2016 NTT corporation
影響度合い 掴 い
• Windows 32 Client VM 廃
• Unicode CLDR (JEP 252)
• -Djava.locale.providers=JRE,SPI 従来通
• JavaDB (Apache Derby) 廃 (JDK-8004716)
• Derby 自体 Apache 開発 け い
• StringBuilder::append 生成 コ 変更 (JEP 280)
• invokedynamic 利用 JDK library function ぶ う
• 新機能 紹 性能改善 コ 関わ う 処理
あ い 思わ …