Prepare for Java 9
Java 9 備え う
KUBOTA Yuji @sugarlife kubota.yuji@gmail.com
NTT OSS Center
2016/Dec/03
Copyright©2016 NTT corporation
2
•大 新機能
• 入 背景 解決 課題
•コ 影響 (可能性 )あ 変更≒非互換性
• 変更
• 非推奨化
•削除 / 廃
• 内部処理変更 / 様化 い い処理 変更
Prepare for Java 9
Copyright©2016 NTT corporation
セ ョン 話
3
• 日 話 Java 9 式
前 変わ 可能性 あ
注意点
Copyright©2016 NTT corporation
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
• 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
• 表示
•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
•発表当日 深夜-朝 新 Java 9 入 新機
能 (JEP) (少 く 2 ) 追加
• JEP 11: Incubator Modules
•JEP 299: Reorganize Documentation
•大 新機能 / 非互換性 内
容 い 触 せ
実例 3
Copyright©2016 NTT corporation
直前 キ
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
9
•新機能
•概要
• Project Jigsaw
•Project Kulla
•非互換性
• ン 周
• API 周
• 周
Agenda
Copyright©2016 NTT corporation
10
Java 9 新機能
Copyright©2016 NTT corporation
• 概要
• Project Jigsaw
• Project Kulla
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 策定
12
JEP: Java Enhancement Proposals
Copyright©2016 NTT corporation
JEP 追う 入 機能 あ 解
openjdk.java.net/jeps/0
13
Project Jigsaw
Copyright©2016 NTT corporation
14
•JAR HELL
•標準
Project Jigsaw
Copyright©2016 NTT corporation
Project Jigsaw 解決 う い 課題 い
15
•JAR HELL
• 依 性 複雑怪奇
•標準
• 巨大 分割 可
Project Jigsaw
Copyright©2016 NTT corporation
Project Jigsaw 解決 う い 課題 い
16
•紛失 ?
•コン 発生?
•内部 API 安全 変更 ?
依 性 複雑怪奇
Copyright©2016 NTT corporation
依 性 複雑怪奇 何 問題
17
•紛失 ?
•コン 発生?
→依 性 定義 い 問題
•内部 API 安全 変更 ?
→公開制限 定義 い 問題
依 性 複雑怪奇
Copyright©2016 NTT corporation
依 性 複雑怪奇 何 問題
18
•紛失 ?
•コン 発生?
→依 性 定義 い 問題
•内部 API 安全 変更 ?
→公開制限 定義 い 問題
•解決策: Module 入
依 性 複雑怪奇
Copyright©2016 NTT corporation
依 性 複雑怪奇 何 問題
19
Module
Copyright©2016 NTT corporation
Module コン
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
20
Module
Copyright©2016 NTT corporation
明 一
JAR
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
21
Module
Copyright©2016 NTT corporation
module-info.java 定義
JAR
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
module-info.java
22
Module
Copyright©2016 NTT corporation
置く
JAR
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
module-info.java
23
Module
Copyright©2016 NTT corporation
定義
module com.foo.bar {
}
JAR
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
JAR
module-info.java
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
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
依 性
公開制限
26
Module
Copyright©2016 NTT corporation
com.foo.bar
java.sql
com.foo.internalcom.foo.bar.alpha
java.logging
com.foo.baz
reads
com.foo.app
com.foo.bar.beta
com.foo.ok
:
:
:
:図 う 依 性 公開制限 定義
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;
}
requires
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/)
:
28
Standard library
Copyright©2016 NTT corporation
標準 け 間 依 関係
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
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
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
•何 嬉 い
• 足 /コン 調査 簡易化
• 柔軟 セ 制限
• 標準 縮 圧縮
•備え ?
• ビ 利用 対応 学 う
Project Jigsaw
Copyright©2016 NTT corporation
ョン 変わ 可能性 あ う暫く
33
Project Kulla (JShell)
Copyright©2016 NTT corporation
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
•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
•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
•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
•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
•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
•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
•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
•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
•何 嬉 い
• く API 試せ
•教育用 役立
• CLI framework
• https://github.com/YaSuenag/jmxclient
•備え ?
• 簡単 検討 CLI 利用
Project Kulla (JShell)
Copyright©2016 NTT corporation
jshell 色々 う ?
44
新機能
Copyright©2016 NTT corporation
45
•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 以外 新機能 あ
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
•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
新機能 改善 く一部 紹
48
非互換性
Copyright©2016 NTT corporation
• ン 変更
• API 周 変更
• 周 変更
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
•JEP 227: Enhanced Deprecation
•@Deprecated
• 将来削除 (forRemoval)
• ョン 非推奨 (since)
•jdeprscan
•非推奨 API 利用
@Deprecated
Copyright©2016 NTT corporation
消え 消え 詐欺
51
ン 変更
Copyright©2016 NTT corporation
JVM 挙動周
52
•大半 内部 API セ 化(隠蔽)
•JDK 9 コ ン ョン 回避 可能
•広く使わ い 物(Critical APIs) 代替 用
意 公開
•jdeps 使 影響あ 確認 推奨
• 特 Multi-Release JAR files (JEP 238)
JEP 260: Encapsulate most internal APIs
Copyright©2016 NTT corporation
特 利用 影響 け い 確認
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
• 変更 以 組 廃
• 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
•-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
•-version: コ ン ン ョン削除
•-version く : 付く方
•JAR Manifest JRE-Version 削除
JEP 231: Remove Launch-Time JRE
Version Selection
Copyright©2016 NTT corporation
起動時 ョン指定 く
57
•JDK 構造 変更
JEP 220: Modular Run-Time Images
Copyright©2016 NTT corporation
等 決 打 込 影響
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
•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
•Property File UTF-8 利用可能
•ResourceBundle API UTF-8
込
•native2ascii 削除
•設定 込 ワ 工
夫 隠蔽 い 影響 現 う
JEP 226: UTF-8 Property Files
Copyright©2016 NTT corporation
う く UTF-8 対応 思い 動作等 変更
61
•1.8.0_101-b14
• 1.$MAJOR.0_$MINOR-b$BUILD
•9.1.2+62
• $MAJOR.$MINOR.$SECURITY+$BUILD
•java.version, java.specification.version
•1.8 9
•version.split(“.”)[1] い …
JEP 223: New Version String Scheme
Copyright©2016 NTT corporation
ョン表記 決 打 込 影響
62
•従来 JVM 廃 ョン
変更
•-Xlog:[<selection>]:[<output>]:[<decorators>]
•-Xlog:[出力内容]:[出力先]:[各行 装飾]
JEP 158: Unified JVM Logging
JEP 271: Unified GC Logging
Copyright©2016 NTT corporation
Parser 系 い い全滅
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
•従来 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
• 以 組合せ
• 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
• 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
•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
コ いう 利用 証明書 問題
68
API 周 変更
Copyright©2016 NTT corporation
Java API 削除 挙動変更
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) セキ 面 非推奨化 流
70
• java.util.logging.LogManager
#{add|remove}PropertyChangeListener
• java.util.jar.Pack200.{Packer|Unpacker}#
{add|remove}PropertyChangeListener
• com.sun.security.auth.callback.DialogCal
lbackHandle
Remove deprecated APIs in JEP 162:
Prepare for Modularization
Copyright©2016 NTT corporation
JDK 8 非推奨 い API 削除
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
関係 多い
72
•UnsupportedOperationException 返
• JDK-7059085 (非公開)
•Java SE 1.2 時代 非推奨
•Thread.stop() 残
• いえ inconsistent state
留 せ 処理 危険 伴う 注意
Thread.stop(Throwable) throw UOE
Copyright©2016 NTT corporation
前 ョン い
73
• Arrays.asList(x).toArrays() returns Object[]
(JDK-6260652)
• 配列 ン(clone) 返 い
• JDK 9 Object[] 返
Behavior changed API
Copyright©2016 NTT corporation
JEP 関係 い API 挙動変更
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
•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
•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
前 ョン 非推奨化 削除 一環
77
Deprecate com.sun.jarsigner package by
JDK-8076535
Copyright©2016 NTT corporation
jarsigner コ ン 自体 変更
•独自 JAR 署 方法 実装
•jarsigner コ ン -altsigner 利用
•低 且 利用者 居 い 非推奨
78
周 変更
Copyright©2016 NTT corporation
Serviceability tool
79
Good bye hprof by JEP 240
Copyright©2016 NTT corporation
[PR] heap profiler & visualizer HeapStats !
•hprof 提供 く
• 元々 JVM TI BCI コ あ 非公式扱
い
•コ HeapDump 機能 残
•HeapDump jcmd 等 代替 可能
80
Good bye jhat by JEP 241
Copyright©2016 NTT corporation
[PR] heap profiler & visualizer HeapStats !
•jhat 提供停
•hprof 様 コ 残
• experimental あ 利用 少
• Eclipse MAT 代用可能
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
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
影響 あ う 変更
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 ぶ う
• 新機能 紹 性能改善 コ 関わ う 処理
あ い 思わ …
84
い
@sugarlife
kubota.yuji@gmail.com
Copyright©2016 NTT corporation

Prepare for Java 9 #jjug

  • 1.
    Prepare for Java9 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 Iam 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
  • 9.
    9 •新機能 •概要 • Project Jigsaw •ProjectKulla •非互換性 • ン 周 • API 周 • 周 Agenda Copyright©2016 NTT corporation
  • 10.
    10 Java 9 新機能 Copyright©2016NTT corporation • 概要 • Project Jigsaw • Project Kulla
  • 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 策定
  • 12.
    12 JEP: Java EnhancementProposals Copyright©2016 NTT corporation JEP 追う 入 機能 あ 解 openjdk.java.net/jeps/0
  • 13.
  • 14.
    14 •JAR HELL •標準 Project Jigsaw Copyright©2016NTT corporation Project Jigsaw 解決 う い 課題 い
  • 15.
    15 •JAR HELL • 依性 複雑怪奇 •標準 • 巨大 分割 可 Project Jigsaw Copyright©2016 NTT corporation Project Jigsaw 解決 う い 課題 い
  • 16.
    16 •紛失 ? •コン 発生? •内部API 安全 変更 ? 依 性 複雑怪奇 Copyright©2016 NTT corporation 依 性 複雑怪奇 何 問題
  • 17.
    17 •紛失 ? •コン 発生? →依性 定義 い 問題 •内部 API 安全 変更 ? →公開制限 定義 い 問題 依 性 複雑怪奇 Copyright©2016 NTT corporation 依 性 複雑怪奇 何 問題
  • 18.
    18 •紛失 ? •コン 発生? →依性 定義 い 問題 •内部 API 安全 変更 ? →公開制限 定義 い 問題 •解決策: Module 入 依 性 複雑怪奇 Copyright©2016 NTT corporation 依 性 複雑怪奇 何 問題
  • 19.
    19 Module Copyright©2016 NTT corporation Moduleコン com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal : JAR
  • 20.
    20 Module Copyright©2016 NTT corporation 明一 JAR com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal : JAR
  • 21.
    21 Module Copyright©2016 NTT corporation module-info.java定義 JAR com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal : JAR module-info.java
  • 22.
  • 23.
    23 Module Copyright©2016 NTT corporation 定義 modulecom.foo.bar { } JAR com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal : JAR module-info.java
  • 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 依 性 公開制限
  • 26.
    26 Module Copyright©2016 NTT corporation com.foo.bar java.sql com.foo.internalcom.foo.bar.alpha java.logging com.foo.baz reads com.foo.app com.foo.bar.beta com.foo.ok : : : :図う 依 性 公開制限 定義 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; } requires
  • 27.
    27 Standard library Copyright©2016 NTTcorporation 標準 巨大 いう問題 化 解決 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/) :
  • 28.
    28 Standard library Copyright©2016 NTTcorporation 標準 け 間 依 関係
  • 29.
    29 Standard library Copyright©2016 NTTcorporation 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 NTTcorporation 見当 い 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 NTTcorporation 標準 化 一 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 ョン 変わ 可能性 あ う暫く
  • 33.
  • 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 色々 う ?
  • 44.
  • 45.
    45 •JavaDoc.Next •HTML 5 •Doclint, DocletAPI 改善 •検索機能 追加 •JDK release • javac --release コン •Multi-release jar files (META-INF/version/{9,10,…}) 新機能 Copyright©2016 NTT corporation 二 Project 以外 新機能 あ
  • 46.
    46 •JavaDoc.Next •HTML 5 •Doclint, DocletAPI 改善 •検索機能 追加 •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 新機能 改善 く一部 紹
  • 48.
    48 非互換性 Copyright©2016 NTT corporation •ン 変更 • API 周 変更 • 周 変更
  • 49.
    49 OpenJDK Developers’ Guide •Don’tbreak 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: EnhancedDeprecation •@Deprecated • 将来削除 (forRemoval) • ョン 非推奨 (since) •jdeprscan •非推奨 API 利用 @Deprecated Copyright©2016 NTT corporation 消え 消え 詐欺
  • 51.
    51 ン 変更 Copyright©2016 NTTcorporation JVM 挙動周
  • 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 (keeppublic) • 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 / -target3 世代前 サ •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 構造 変更 JEP220: Modular Run-Time Images Copyright©2016 NTT corporation 等 決 打 込 影響
  • 58.
    58 •javac --release Multi-ReleaseJAR • 自体 新機能 •前述 非互換性 合わせ ビ 多 大 影響 え • 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 対応 思い 動作等 変更
  • 61.
    61 •1.8.0_101-b14 • 1.$MAJOR.0_$MINOR-b$BUILD •9.1.2+62 • $MAJOR.$MINOR.$SECURITY+$BUILD •java.version,java.specification.version •1.8 9 •version.split(“.”)[1] い … JEP 223: New Version String Scheme Copyright©2016 NTT corporation ョン表記 決 打 込 影響
  • 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 GCG1 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: CreatePKCS12 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 コ いう 利用 証明書 問題
  • 68.
    68 API 周 変更 Copyright©2016NTT corporation Java API 削除 挙動変更
  • 69.
    69 •JEP 289: Deprecatethe 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) セキ 面 非推奨化 流
  • 70.
    70 • java.util.logging.LogManager #{add|remove}PropertyChangeListener • java.util.jar.Pack200.{Packer|Unpacker}# {add|remove}PropertyChangeListener •com.sun.security.auth.callback.DialogCal lbackHandle Remove deprecated APIs in JEP 162: Prepare for Modularization Copyright©2016 NTT corporation JDK 8 非推奨 い API 削除
  • 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 関係 多い
  • 72.
    72 •UnsupportedOperationException 返 • JDK-7059085(非公開) •Java SE 1.2 時代 非推奨 •Thread.stop() 残 • いえ inconsistent state 留 せ 処理 危険 伴う 注意 Thread.stop(Throwable) throw UOE Copyright©2016 NTT corporation 前 ョン い
  • 73.
    73 • Arrays.asList(x).toArrays() returnsObject[] (JDK-6260652) • 配列 ン(clone) 返 い • JDK 9 Object[] 返 Behavior changed API Copyright©2016 NTT corporation JEP 関係 い API 挙動変更
  • 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/JRMPHTTP tunneling 実装 削除 (JDK-8155978) The entire HTTP proxying mechanism of RMI deprecated in JDK 8 will be removed Copyright©2016 NTT corporation 前 ョン 非推奨化 削除 一環
  • 77.
    77 Deprecate com.sun.jarsigner packageby JDK-8076535 Copyright©2016 NTT corporation jarsigner コ ン 自体 変更 •独自 JAR 署 方法 実装 •jarsigner コ ン -altsigner 利用 •低 且 利用者 居 い 非推奨
  • 78.
    78 周 変更 Copyright©2016 NTTcorporation Serviceability tool
  • 79.
    79 Good bye hprofby JEP 240 Copyright©2016 NTT corporation [PR] heap profiler & visualizer HeapStats ! •hprof 提供 く • 元々 JVM TI BCI コ あ 非公式扱 い •コ HeapDump 機能 残 •HeapDump jcmd 等 代替 可能
  • 80.
    80 Good bye jhatby JEP 241 Copyright©2016 NTT corporation [PR] heap profiler & visualizer HeapStats ! •jhat 提供停 •hprof 様 コ 残 • experimental あ 利用 少 • Eclipse MAT 代用可能
  • 81.
    81 •native2ascii • JEP 226UTF-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: AddMore 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 ぶ う • 新機能 紹 性能改善 コ 関わ う 処理 あ い 思わ …
  • 84.