Copyright©2018 NTT corp. All Rights Reserved.
Java 10でぼくたちの生活は
どうかわるの?
2018年3月26日
NTT OSSセンタ 久保田 祐史
2Copyright©2018 NTT corp. All Rights Reserved.
•2018/3/20 リリース予定!
•前回から半年後
•12件の新機能
Java 10
3Copyright©2018 NTT corp. All Rights Reserved.
•メリット
•開発が活発化し便利な機能がどんど
ん入る
•例: Docker対応、あれば便利なAPI
•「あれば便利」が3年後はつらかった
•デメリット
•非互換性対応などのアップデート対
応コストが高くなる
リリースサイクル高速化
e.g.) String::repeat
4Copyright©2018 NTT corp. All Rights Reserved.
•新機能
•JEP(Java Enhancement Proposal)を見る
• openjdk.java.net/projects/jdk/10/#Features
•APIの変更
•JSR(Java Specification Request)の最終仕様
書(Specification)を見る
• cr.openjdk.java.net/~iris/se/10/latestSpec/
•非互換性
•リリースノートを見る
•バグDBからも確認が可能
• https://gist.github.com/ykubota/3afcfdac5b
252bd31ae8c14b54b5d32f
Java 10の情報収集
5Copyright©2018 NTT corp. All Rights Reserved.
• JEP 286: Local-Variable Type Inference
• ローカル変数の型推論「var」の導入
Java 10の主な嬉しい新機能
6Copyright©2018 NTT corp. All Rights Reserved.
JEP 286: Local-Variable Type Inference
URL url = new URL("http://java.net");
URLConnection conn = url.openConnection();
Scanner scanner =
new Scanner(conn.getInputStream());
List<String> list = new ArrayList<String>();
Stream<String> stream = list.stream();
7Copyright©2018 NTT corp. All Rights Reserved.
var url = new URL("http://java.net");
var conn = url.openConnection();
var scanner =
new Scanner(conn.getInputStream());
var list = new ArrayList<String>();
var stream = list.stream();
JEP 286: Local-Variable Type Inference
8Copyright©2018 NTT corp. All Rights Reserved.
• JEP 286: Local-Variable Type Inference
• ローカル変数の型推論「var」の導入
• JEP 310: Application Class-Data Sharing
• JVM プロセス間でメタデータやクラス情報を
共有する仕組み
• 多数のプロセスを立ち上げるケースでのメモリ
節約と起動時間の短縮が見込める
• Oracle JDK商用機能移行の第一弾
Java 10の主な嬉しい新機能
9Copyright©2018 NTT corp. All Rights Reserved.
• AppCDS (Application Class-Data Sharing)
• プロセス間でメタデータやクラス情報を共有する仕組
• Resource Management
• プロセス間でメモリやスレッドプールを共有する仕組
• Java Flight Recorder(Flight Recorder)
• JDKに組み込まれた低オーバヘッドのランタイム情報
プロファイリング、イベント収集フレームワーク
• 本日(3/15)の朝にプロポーサルが出された
• Java Mission Control(JDK Mission Control)
• Java Flight Recorderによって収集されたデータを効
率的に分析するためのツール・セット
• 先日(3/14)、コミュニティにてオープンソース化提案
に向けた議論が呼びかけられた
Oracle JDKの商用機能
10Copyright©2018 NTT corp. All Rights Reserved.
• JEP 286: Local-Variable Type Inference
• ローカル変数の型推論「var」の導入
• JEP 310: Application Class-Data Sharing
• JVM プロセス間でメタデータやクラス情報を
共有する仕組み
• 多数のプロセスを立ち上げるケースでのメモリ
節約と起動時間の短縮が見込める
• Oracle JDK商用機能移行の第一弾
• JEP 307: Parallel Full GC for G1
• シングルスレッド実行であったG1 GCのFull
GCが並列化
Java 10の主な嬉しい新機能
11Copyright©2018 NTT corp. All Rights Reserved.
•APIの変更(※調査中の値です。件=bugチケットの数)
•追加2件以上
•非推奨化3件以上(非推奨化中止1件)
•削除6件以上
•APIの削除
•Java 9よりDeprecatedアノテーション
が強化され削除フラグが追加された
•@Deprecated(forRemoval=true)
•次バージョン以降に削除される
Java 10の非互換性チラ見
jdeprscan ツールを使おう
12Copyright©2018 NTT corp. All Rights Reserved.
•コンテナを認識せずホストのCPU数とメモリ
を基に設定や動作が行われていた問題を修正
• -XX:+UseContainerSupport (デフォルト有効)
• cpu sets, cpu shares, cpu quotasを基に設定
• -XX:ActiveProcessorCount=<count> で上書可
• cgroup filesystemの memory_limit を基に設定
•ヒープに使用するシステムメモリ量を柔軟化
• -XX:{Initial,Max,Min}RAMPercentage
• -XX:{Max,MIN}RAMFraction より便利
•ホストからコンテナ上のプロセスにアタッチ
できるように改善
Dockerコンテナに関する改善
13Copyright©2018 NTT corp. All Rights Reserved.
•Add
• java.util.Optional.orElseThrow()
• java.util.Optional::get() からの置換推奨
• java.util.{List,Set,Map}::copyOf
• 引数のコレクションが変更可能な場合はコピーし
て変更不可能なコレクションを返す。変更不可能
な場合は、そのままリファレンスを返すメソッド
• 変更不可能かどうかの確認メソッドや変更不可能
なコレクション作成を自前でやっていた場合はこ
れに置換推奨
API
14Copyright©2018 NTT corp. All Rights Reserved.
•Remove
• forRemoval=trueのAPIが消えた
• JDK内部Swing LookAndFeelsインスタンス生成API
• javax.swing.UIManager.setLookAndFeel(…)
• com.sun.security.auth.*の非推奨クラスを削除
• java.lang.SecurityManager::checkPermissionに
置換可能な非推奨クラスやフィールドを削除
• JDK 1.1から非推奨な国際化メカニズムの一部を
削除
• java.lang.Runtime::getLocalized{In,Out}putStream
• その他、JavaFX関係のAPIが一部削除
API
15Copyright©2018 NTT corp. All Rights Reserved.
•Add
• javadocに以下の追加拡張が行われた
• サマリアノテーション(@summary)
• ヘッダフッタ指定(-top, -bottom)
• オーバライドメソッド書式指定(--override-methods)
• 複数スタイルシート利用サポート
• Remove
• policytool
• javah (javac -h で代用可能)
• JDK 6-8の標準ドックレット(doclet)
• javadoc API(com.sun.javadoc)は非推奨だが存続
Tool
16Copyright©2018 NTT corp. All Rights Reserved.
•Remove
• -Xoss, -Xsqnopause, -Xoptimize,
-Xboudthreads, -Xusealtsigs
• -Xprof (FlatProfiler)
• -XX:+Trace{Young,Old}GenTime
• -Xlog:gc+heap+exit=debug に置き換わった
• -d32, -d64
• Change
• -XX:BiasedLockingStartupDelay が4000から0に
• 計算機が向上し、遅延を有効にしてVMのオーバーヘッ
ドが発生するよりは無効にした方が性能が良くなった
Option
17Copyright©2018 NTT corp. All Rights Reserved.
•盛り上がる Swing/AWT
• Windows 8以降のキーボードがないモバイル環境な
どでテキストコンポーネントにフォーカスを移した場
合、OSのソフトウェアキーボードが自動で出るよう
になった
その他
18Copyright©2018 NTT corp. All Rights Reserved.
•JShellの起動が早くなった
• コンパイラインスタンスを都度立ち上げていたので、
大量の snippet と共に起動しようとすると遅かった
• krb5 1.15 追随
• includedir <DIRNAME> で指定したディレクトリ
の .conf で終わるファイルも読むようになった
• JNLP が IE 11 on Windows 10 で動かない
• Windows 10 Creators Update適用後からJNLPリンクをクリ
ックしてもJava Web Startアプリケーションが立ち上がらな
くなった
• Oracle 社の発表通り、Java 11以降は Java Web Start が
Oracle JDKに含まれなくなる
• OpenJDK には元から含まれていない
その他

Java 10でぼくたちの生活はどう変わるの?

  • 1.
    Copyright©2018 NTT corp.All Rights Reserved. Java 10でぼくたちの生活は どうかわるの? 2018年3月26日 NTT OSSセンタ 久保田 祐史
  • 2.
    2Copyright©2018 NTT corp.All Rights Reserved. •2018/3/20 リリース予定! •前回から半年後 •12件の新機能 Java 10
  • 3.
    3Copyright©2018 NTT corp.All Rights Reserved. •メリット •開発が活発化し便利な機能がどんど ん入る •例: Docker対応、あれば便利なAPI •「あれば便利」が3年後はつらかった •デメリット •非互換性対応などのアップデート対 応コストが高くなる リリースサイクル高速化 e.g.) String::repeat
  • 4.
    4Copyright©2018 NTT corp.All Rights Reserved. •新機能 •JEP(Java Enhancement Proposal)を見る • openjdk.java.net/projects/jdk/10/#Features •APIの変更 •JSR(Java Specification Request)の最終仕様 書(Specification)を見る • cr.openjdk.java.net/~iris/se/10/latestSpec/ •非互換性 •リリースノートを見る •バグDBからも確認が可能 • https://gist.github.com/ykubota/3afcfdac5b 252bd31ae8c14b54b5d32f Java 10の情報収集
  • 5.
    5Copyright©2018 NTT corp.All Rights Reserved. • JEP 286: Local-Variable Type Inference • ローカル変数の型推論「var」の導入 Java 10の主な嬉しい新機能
  • 6.
    6Copyright©2018 NTT corp.All Rights Reserved. JEP 286: Local-Variable Type Inference URL url = new URL("http://java.net"); URLConnection conn = url.openConnection(); Scanner scanner = new Scanner(conn.getInputStream()); List<String> list = new ArrayList<String>(); Stream<String> stream = list.stream();
  • 7.
    7Copyright©2018 NTT corp.All Rights Reserved. var url = new URL("http://java.net"); var conn = url.openConnection(); var scanner = new Scanner(conn.getInputStream()); var list = new ArrayList<String>(); var stream = list.stream(); JEP 286: Local-Variable Type Inference
  • 8.
    8Copyright©2018 NTT corp.All Rights Reserved. • JEP 286: Local-Variable Type Inference • ローカル変数の型推論「var」の導入 • JEP 310: Application Class-Data Sharing • JVM プロセス間でメタデータやクラス情報を 共有する仕組み • 多数のプロセスを立ち上げるケースでのメモリ 節約と起動時間の短縮が見込める • Oracle JDK商用機能移行の第一弾 Java 10の主な嬉しい新機能
  • 9.
    9Copyright©2018 NTT corp.All Rights Reserved. • AppCDS (Application Class-Data Sharing) • プロセス間でメタデータやクラス情報を共有する仕組 • Resource Management • プロセス間でメモリやスレッドプールを共有する仕組 • Java Flight Recorder(Flight Recorder) • JDKに組み込まれた低オーバヘッドのランタイム情報 プロファイリング、イベント収集フレームワーク • 本日(3/15)の朝にプロポーサルが出された • Java Mission Control(JDK Mission Control) • Java Flight Recorderによって収集されたデータを効 率的に分析するためのツール・セット • 先日(3/14)、コミュニティにてオープンソース化提案 に向けた議論が呼びかけられた Oracle JDKの商用機能
  • 10.
    10Copyright©2018 NTT corp.All Rights Reserved. • JEP 286: Local-Variable Type Inference • ローカル変数の型推論「var」の導入 • JEP 310: Application Class-Data Sharing • JVM プロセス間でメタデータやクラス情報を 共有する仕組み • 多数のプロセスを立ち上げるケースでのメモリ 節約と起動時間の短縮が見込める • Oracle JDK商用機能移行の第一弾 • JEP 307: Parallel Full GC for G1 • シングルスレッド実行であったG1 GCのFull GCが並列化 Java 10の主な嬉しい新機能
  • 11.
    11Copyright©2018 NTT corp.All Rights Reserved. •APIの変更(※調査中の値です。件=bugチケットの数) •追加2件以上 •非推奨化3件以上(非推奨化中止1件) •削除6件以上 •APIの削除 •Java 9よりDeprecatedアノテーション が強化され削除フラグが追加された •@Deprecated(forRemoval=true) •次バージョン以降に削除される Java 10の非互換性チラ見 jdeprscan ツールを使おう
  • 12.
    12Copyright©2018 NTT corp.All Rights Reserved. •コンテナを認識せずホストのCPU数とメモリ を基に設定や動作が行われていた問題を修正 • -XX:+UseContainerSupport (デフォルト有効) • cpu sets, cpu shares, cpu quotasを基に設定 • -XX:ActiveProcessorCount=<count> で上書可 • cgroup filesystemの memory_limit を基に設定 •ヒープに使用するシステムメモリ量を柔軟化 • -XX:{Initial,Max,Min}RAMPercentage • -XX:{Max,MIN}RAMFraction より便利 •ホストからコンテナ上のプロセスにアタッチ できるように改善 Dockerコンテナに関する改善
  • 13.
    13Copyright©2018 NTT corp.All Rights Reserved. •Add • java.util.Optional.orElseThrow() • java.util.Optional::get() からの置換推奨 • java.util.{List,Set,Map}::copyOf • 引数のコレクションが変更可能な場合はコピーし て変更不可能なコレクションを返す。変更不可能 な場合は、そのままリファレンスを返すメソッド • 変更不可能かどうかの確認メソッドや変更不可能 なコレクション作成を自前でやっていた場合はこ れに置換推奨 API
  • 14.
    14Copyright©2018 NTT corp.All Rights Reserved. •Remove • forRemoval=trueのAPIが消えた • JDK内部Swing LookAndFeelsインスタンス生成API • javax.swing.UIManager.setLookAndFeel(…) • com.sun.security.auth.*の非推奨クラスを削除 • java.lang.SecurityManager::checkPermissionに 置換可能な非推奨クラスやフィールドを削除 • JDK 1.1から非推奨な国際化メカニズムの一部を 削除 • java.lang.Runtime::getLocalized{In,Out}putStream • その他、JavaFX関係のAPIが一部削除 API
  • 15.
    15Copyright©2018 NTT corp.All Rights Reserved. •Add • javadocに以下の追加拡張が行われた • サマリアノテーション(@summary) • ヘッダフッタ指定(-top, -bottom) • オーバライドメソッド書式指定(--override-methods) • 複数スタイルシート利用サポート • Remove • policytool • javah (javac -h で代用可能) • JDK 6-8の標準ドックレット(doclet) • javadoc API(com.sun.javadoc)は非推奨だが存続 Tool
  • 16.
    16Copyright©2018 NTT corp.All Rights Reserved. •Remove • -Xoss, -Xsqnopause, -Xoptimize, -Xboudthreads, -Xusealtsigs • -Xprof (FlatProfiler) • -XX:+Trace{Young,Old}GenTime • -Xlog:gc+heap+exit=debug に置き換わった • -d32, -d64 • Change • -XX:BiasedLockingStartupDelay が4000から0に • 計算機が向上し、遅延を有効にしてVMのオーバーヘッ ドが発生するよりは無効にした方が性能が良くなった Option
  • 17.
    17Copyright©2018 NTT corp.All Rights Reserved. •盛り上がる Swing/AWT • Windows 8以降のキーボードがないモバイル環境な どでテキストコンポーネントにフォーカスを移した場 合、OSのソフトウェアキーボードが自動で出るよう になった その他
  • 18.
    18Copyright©2018 NTT corp.All Rights Reserved. •JShellの起動が早くなった • コンパイラインスタンスを都度立ち上げていたので、 大量の snippet と共に起動しようとすると遅かった • krb5 1.15 追随 • includedir <DIRNAME> で指定したディレクトリ の .conf で終わるファイルも読むようになった • JNLP が IE 11 on Windows 10 で動かない • Windows 10 Creators Update適用後からJNLPリンクをクリ ックしてもJava Web Startアプリケーションが立ち上がらな くなった • Oracle 社の発表通り、Java 11以降は Java Web Start が Oracle JDKに含まれなくなる • OpenJDK には元から含まれていない その他