new feature of java se 8

135
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 1

Upload: oracle-fusion-middleware

Post on 08-Sep-2014

16.284 views

Category:

Technology


6 download

DESCRIPTION

I explained the new features of Java SE 8.

TRANSCRIPT

Page 1: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 1

Page 2: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 3

7 8 9 …

• Productivity (生産性) • Performance (パフォーマンス) • Universality (普遍性) • Modularity (モジュール化) •  Integration (統合) •  Serviceability (サービス提供力)

Page 4: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 4

2010 年 9 月 8 日 タイトル:Re-thinking JDK 7 Plan A: JDK 7 (as currently defined) Mid 2012 Plan B: JDK 7 : Mid 2011 (minus Lambda, Jigsaw, and part of Coin) JDK 8 : Late 2012 (Lambda, Jigsaw, the rest of Coin, ++)

Plan B:早く実装が可能な一部機能を先にリリース

Page 5: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 5

7Project Coin (JSR 334) NIO.2 (JSR 203) Fork/Join Framework InvokeDynamic (JSR 292)

2011 年 7 月 28 日 正式リリース

Page 6: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 6

2012 年 7 月 17 日 タイトル:Project Jigsaw: Late for the train I think the best choice is to defer Project Jigsaw to Java 9, and to aim for a two-year release cycle going forward. On this plan Java 8 will ship on time, around September 2013. Jigsaw の検討、実装、検証に時間が足りないため 次の Java SE 9 へ持ち越し

Page 7: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 7

2013 年 4 月 18 日 タイトル:Java 8: Secure the train As a consequence of this renewed focus on security the Java 8 schedule, with a GA release in early September, is no longer achievable. then resume a regular two-year release cadence, with Java 8 due in early 2014 and Java 9 in early 2016. Java開発者がセキュリティ脆弱性対応に集中し、 リリース日を2013 年 9 月から2014年初旬に変更

Page 8: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 8

2013 年 4 月 26 日 タイトル:Java 8: Hold the train

The target release date for Java 8 is now 2014/3/18.

最終的なリリース予定日を 3/18 に決定

Page 9: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 9

祝 Java SE 8 正式リリース 2014 年 03 月 18 日

Page 10: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 10

JSR- 337 : Java SE 8

Page 11: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 11

Page 12: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 12

Lambda Expression 関連 13:30~14:20 徹底解説!Project Lambdaのすべて リターンズ 吉田 真也さん (@bitter_fox)

14:30~15:20 null書いたら負け! Java8コーディング作法 きしだ なおきさん (@kis)

17:30~18:20 from old Java to modern Java ‒ reloaded 谷本 心さん (@cero_t)

Page 13: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 13

Date & Time API

15:30~16:20 Brand new Date and Time API 蓮沼 賢志さん(@btnrouge)

Page 14: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 14

Java リッチクライアント開発技術

16:30~17:20 JavaFX ‒ GUI by Illusion 櫻庭祐一さん(@skrb)

Page 15: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 15

Compact プロファイル

各APIにどのプロファイルで 利用可能か記載されている

参考:https://blogs.oracle.com/jtc/entry/a_first_look_at_compact

Page 16: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 16

SE Embedded & Raspberry Pi

18:20~18:30 Raspberry Pi on Java ショートアップデート 太田 昌文さん(@masafumi_ohta)

Page 17: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 17

重要資料のご紹介

Page 18: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 18

Java リリース・ノート

http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html

Page 19: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 19

JDK 8 の新機能概要

http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html

Page 20: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 20

Java Platform Standard Edition 8 ドキュメント

http://docs.oracle.com/javase/8/docs/

Page 21: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 21

JDK 8 の互換性・非互換性の情報ガイド

http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html

Page 22: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 22

JDK 8 リリース時の既知の問題

http://www.oracle.com/technetwork/java/javase/8-known-issues-2157115.html

Page 23: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 23

Java サポート・ロードマップ

http://www.oracle.com/technetwork/java/eol-135779.html

Page 24: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 24

Java チュートリアル

http://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html

Page 25: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 25

is Back

Page 26: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 26

Page 27: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 27

Page 28: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 28

Page 29: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 29

Page 30: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 30

日程:2014 年 5 月22 日 場所:品川プリンスホテル 参加費用 : 無料

Page 31: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 31

Java Day Tokyo 2014 日本オラクルからの Java SE 8 ローンチ・イベント Lambda の開発者も来る !!

Page 32: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 32

登録開始予定 : 4 月 2 日 (水)

Page 33: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 33

JJUG CCC Spring 2014 日程:  5 / 18 (日) 場所:  ベルサール西新宿 参加費用:無料

Page 34: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 34

5 月 18 日(日)   JJUG CCC Spring 2014   場所:ベルサール西新宿 5 月 22 日(木)   Java Day Tokyo 2014   場所:品川プリンスホテル 5 月 23 日(金)   Java SE 8 & Raspberry Pi ハンズオン   場所:オラクル青山センター 5 月 24 日(土)   Java Bike Ride (サイクリング)

5 月の Java 祭り

Page 35: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 35

Page 36: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 36

Java SE 8 参考資料

Page 37: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 37

Java SE 8 (JSR 337) 新機能

•  JSR-308 : Annotations on types •  JSR-310 : Date and Time API •  JSR-335 : Lambda expressions

更新機能 •  JSR-114 : JDBC Rowsets •  JSR-160 : JMX Remote API •  JSR-199 : Java Compiler API •  JSR-173 : Streaming API for XML •  JSR-221 : JDBC 4.0 •  JSR-269 : Pluggable Annotation-Processing API

Page 38: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 38

JDK に対する拡張 : JEP

J DK E nhancement : 拡張 P roposals : 提案

ご参照:http://openjdk.java.net/projects/jdk8/features

Page 39: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 39

カテゴリ JEP ID 新機能の概要 --/-- 126 Lambda 式 と 仮想的な拡張メソッド(default method) --/-- 138 Autoconf-Based のビルド・システム --/-- 160 Lambda-Form Representation for Method Handles --/-- 161 コンパクト・プロファイル --/-- 162 モジュール化への準備 --/-- 164 AES 暗号化のために CPU 命令の活用 --/-- 174 Nashorn JavaScript エンジン --/-- 176 Mechanical Checking of Caller-Sensitive Methods --/-- 179 Document JDK API Support and Stability vm/-- 142 Reduce Cache Contention on Specified Fields vm/gc 122 パーマネント領域の削除 vm/gc 173 あまり使用されない GC の組み合わせの禁止

JDK 8 : JEP に記載される拡張機能 一覧

Page 40: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 40

カテゴリ JEP ID 新機能の概要 vm/rt 136 Enhanced Verification Errors vm/rt 147 Reduce Class Metadata Footprint vm/rt 148 Small VM vm/rt 171 Fence Intrinsics core/-- 153 Launch JavaFX Applications core/lang 101 Generalized Target-Type Inference core/lang 104 Annotations on Java Types core/lang 105 DocTree API core/lang 106 Add Javadoc to javax.tools core/lang 117 Remove the Annotation-Processing Tool (apt) core/lang 118 Access to Parameter Names at Runtime core/lang 120 Repeating Annotations

JDK 8 : JEP に記載される拡張機能 一覧

Page 41: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 41

カテゴリ JEP ID 新機能の概要 core/lnag 139 Enhance javac to Improve Build Speed core/lnag 172 DocLint core/lib 103 Parallel Array Sorting core/lib 107 Bulk Data Operations for Collections core/lib 109 Enhance Core Libraries with Lambda core/lib 112 Charset Implementation Improvements core/lib 119 javax.lang.model Implementation Backed by Core Reflection core/lib 135 Base64 Encoding & Decoding core/lib 149 Reduce Core-Library Memory Usage core/lib 150 Date & Time API core/lib 155 Concurrency Updates core/lib 170 JDBC 4.2

JDK 8 : JEP に記載される拡張機能 一覧

Page 42: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 42

カテゴリ JEP ID 新機能の概要 core/lib 177 Optimize java.text.DecimalFormat.format core/lib 178 Statically-Linked JNI Libraries core/lib 180 Handle Frequent HashMap Collisions with Balanced Trees core/i18n 127 Improve Locale Data Packaging and Adopt Unicode CLDR Data core/i18n 128 BCP 47 Locale Matching core/i18n 133 Unicode 6.2 core/net 184 HTTP URL Permissions core/sec 113 MS-SFU Kerberos 5 Extensions core/sec 114 TLS Server Name Indication (SNI) Extension core/sec 115 AEAD CipherSuites core/sec 121 Stronger Algorithms for Password-Based Encryption core/sec 123 Configurable Secure Random-Number Generation

JDK 8 : JEP に記載される拡張機能 一覧

Page 43: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 43

カテゴリ JEP ID 新機能の概要 core/sec 124 Enhance the Certificate Revocation-Checking API core/sec 129 NSA Suite B Cryptographic Algorithms core/sec 130 SHA-224 Message Digests core/sec 131 PKCS#11 Crypto Provider for 64-bit Windows core/sec 140 Limited doPrivileged core/sec 166 Overhaul JKS-JCEKS-PKCS12 Keystores web/jaxp 185 JAXP 1.5: Restrict Fetching of External Resources

ご参照:http://openjdk.java.net/projects/jdk8/features

JDK 8 : JEP に記載される拡張機能 一覧

Page 44: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 44

Page 45: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 45

Language

Core Libraries

Virtual machine

Security

Platform

Internationalisation

Page 46: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 46

Language

Core Libraries

Virtual machine

Security

Platform

Internationalisation

Page 47: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 47

ExecutorService exec = … ;!Runnable task = new Runnable(){! @Override! public void run()[! doSomethings();! }!}!exec.submit(task);

ExecutorService exec = … ;!exec.submit(() -> doSomethings());

JEP 126 : Lambda 式

メソッドを1つ持つ 匿名インナー・クラスを 簡単に書く事が可能

Page 48: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 48

既存インタフェースに後方互換性を持つ追加メソッドの提供

public interface Collection<E> extends Iterable<E> {! default boolean removeIf(Predicate<? super E> filter)! default Spliterator<E> spliterator()! default Stream<E> stream()! default Stream<E> parallelStream()!}!

既存のインタフェースに後からメソッドを追加した場合、過去の実装プログラムでエラーが発生。そこで default 実装を追加

JEP 126 : 拡張メソッド

Page 49: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 49

Java SE 7 までアノテーションを適用できる場所

java.lang.annotation.ElementType! Enum 定数 概要 適用箇所 ANNOTATION_TYPE アノテーション型の宣言部へ適用可能 宣言部 CONSTRUCTOR コンストラクタの宣言部へ適用可能 宣言部 FIELD フィールド (enum定数を含む) の宣言部へ適用可能 宣言部 LOCAL_VARIABLE ローカル変数の宣言部へ適用可能 宣言部 METHOD メソッドの宣言部へ適用可能 宣言部 PACKAGE パッケージの宣言部へ適用可能 宣言部 PARAMETER パラメータの宣言部へ適用可能 宣言部 TYPE クラス、インタフェース、列挙型の宣言部へ適用可能 宣言部

JEP 104 : Java の型に対するアノテーション

Page 50: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 50

Java SE 8 から 2 カ所、適用可能な場所を追加

java.lang.annotation.ElementType! Enum 定数 概要 適用箇所 TYPE_PARAMETER 型パラメータの宣言部へ適用可能 宣言部 TYPE_USE 型の使用 型

JEP 104 : Java の型に対するアノテーション

Page 51: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 51

宣言部ではなく型の使用時にアノテーションを付加可能 public void foo(@NotNull List data){! ;!}! !public void bar(Map<@NotNull String, ! @NotEmpty List<@NotNull Data>){! ;!}!

3rd パーティの型チェッカーを利用しエラー検知が可能

JEP 104 : Java の型に対するアノテーション

Page 52: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 52

Java SE 8 では、アノテーションの適用可能な場所は増えたが、 対応する実装は提供されていない。 Java SE 8 で提供されたアノテーションを利用した、 3rd パーティの型チェッカーを利用する事でエラー検知が可能

ご参考: http://www.slideshare.net/kimuchi583/r5-3-type-annotation#

JEP 104 : Java の型に対するアノテーション

Page 53: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 53

public void foo(){! processData(new ArrayList<>());!}! !private void processData(List<String> data){! ; !}!

Java SE 7 ではエラー:ArrayList<Object>と見られる

JEP 101 : ターゲット型推論の強化

Page 54: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 54

public void foo(){! processData(new ArrayList<>());!}! !private void processData(List<String> data){! ; !}!

同じコードが Java SE 8 では正常にビルド可能 ターゲット型の推論実装が Java SE 7 より改善

JEP 101 : ターゲット型推論の強化

Page 55: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 55

メソッドの引数の取得が可能 Class targetClass = Object.class;!for (Method method : targetClass.getDeclaredMethods()) {! System.err.println(method.getName());! for (Parameter param : method.getParameters()) {! System.err.println("\t" + param.getName());! }!}!

JEP 118 : リフレクションでメソッド引数を取得可能

Page 56: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 56

例:繰り返し処理可能なアノテーションの記述例 @Schedule(dayOfMonth="last") !@Schedule(dayOfWeek="Fri", hour="23") !public void doPeriodicCleanup() { ... }!

@Repeatable(Schedules.class) public @interface Schedule { ... }!

繰り返し記述可能な独自アノテーションの定義 JEP 120 : 同一アノテーションの繰返し記述

Page 57: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 57

Language

Core Libraries

Virtual machine

Security

Platform

Internationalisation

Page 58: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 58

•  標準ライブラリの近代化 •  パフォーマンスの改善 Lambda 実装に invokedynamicを使用

•  拡張メソッドの良い実装例を提供

JEP 109 : Lambda導入に伴うライブラリ拡張

Page 59: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 59

•  Java に 「filter/map/reduce」を提供 •  一括操作に「シリアル処理」、「パラレル処理」を利用可能 パラレル処理は内部的に Fork/Join の実装を利用

•  データに対する操作は一般的に Lambda 式を利用  関連 API   java.util.stream.Stream!

JEP 107 : コレクションに対する一括操作

Page 60: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 60

•  マルチ・スレッド環境用のスケーラブルな更新可能な変数 Java SE 5 で提供された Atomic 変数と比較し内部競合を削減し高パフォーマンス 関連 API java.util.concurrent.atomic.LongAdder !java.util.concurrent.atomic.DoubleAdder !java.util.concurrent.atomic.LongAccumulator!java.util.concurrent.atomic.DoubleAccumulator!

JEP 155 : 並列処理用 API の改善

Page 61: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 61

•  ConcurrentHashMap の機能追加 •  Java SE 7 : メソッド数 : 19 •  Java SE 8 : メソッド数 : 93

•  新規4クラス追加 java.util.concurrent.ConcurrentHashMap.EntrySetView<K,V>!java.util.concurrent.ConcurrentHashMap.ForkJoinTasks!java.util.concurrent.ConcurrentHashMap.KeySetView<K,V>!java.util.concurrent.ConcurrentHashMap.ValuesView<K,V>!

JEP 155 : 並列処理用 API の改善

Page 62: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 62

•  ForkJoinPool のパフォーマンス改善と新機能追加

•  新規追加メソッド •  ForkJoinPool.commonPool() : 最適化された Fork/Join プールの作成 •  ForkJoinPool.getCommonPoolParallelism()

JEP 155 : 並列処理用 API の改善

Page 63: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 63

•  java.util.Arrays への機能追加 •  Java SE 7 : メソッド数 : 105 •  Java SE 8 : メソッド数 : 166

•  並列ソート用のメソッドの追加 •  parallelSort() メソッド •  ForkJoinPool の Common Pool を使用

•  Stream, ParallelStream (Int,Double, Long) の取得も可能

JEP 103 : 配列の並列処理によるソート

Page 64: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 64

Java 1.0 : Date クラスの提供 (機能不足で1.1で多くがdeprecated) Java 1.1 : Calendar クラスの提供 (mutable で うるう秒などに未対応)

java.time パッケージのオブジェクトは immutable Date の代わりに Instant を使用 Java の Time では 1日は 86,400 秒 Duration は2つの instants の差 LocalDateTime はタイムゾーンの情報を含まない TemporalAdjuster メドッドは共通のカレンダー計算を実施   例:月の最初の火曜日を検索

JEP 150 : Date and Time API

Page 65: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 65

ZoneDateTime は指定したタイムゾーンの時間のポイント   (GregorianCalendar に類似) 日付や時間のフォーマットや解析に DateTimeFormatterを使用

JEP 150 : Date and Time API

Page 66: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 66

•  REF_CURSOR のサポート •  java.sql.DriverAction インタフェースの追加 •  java.sql.SQLType インタフェースの追加 •  java.sql.JDBCType Enum の追加 •  int 以上の大きな更新カウント用に Statement クラス(long)を追加

•  Integer.MAX_VALUEを超える場合に使用 •  既存インタフェースの変更 •  RowSet 1.2

JEP 170 : JDBC 4.2 への更新

Page 67: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 67

変更されたインタフェース 変更されたインタフェース java.sql.Driver java.sql.PreparedStatement

java.sql.DriverManager java.sql.ResultSet

java.sql.DatabaseMetaData java.sql.SQLInput

java.sql.Date java.sql.SQLOutput

java.sql.Time java.sql.Types

java.sql.TimeStamp javax.sql.DataSource

java.sql.Statement javax.sql.XADataSource

java.sql.CallableStatement java.sql.SQLXML

JEP 170 : JDBC インタフェースの変更点

Page 68: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 68

変更されたクラス 変更されたクラス javax.sql.rowset.BaseRowSet javax.sql.rowset.serial.SerialBlob

javax.sql.rowset.CachedRowSet javax.sql.rowset.serial.SerialClob

javax.sql.rowset.Predicate javax.sql.rowset.serial.SerialDatalink

javax.sql.rowset.JdbcRowSet javax.sql.rowset.serial.SerialJavaObject

javax.sql.rowset.RowSetMetaDataImpl javax.sql.rowset.serial.SerialRef

javax.sql.rowset.spi.SyncFactory javax.sql.rowset.serial.SerialStruct

javax.sql.rowset.serial.SerialArray

JEP 170 : JDBC RowSet 1.2 での変更クラス

Page 69: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 69

java.util.Base64!java.util.Base64.Encoder!java.util.Base64.Decoder

•  非標準だった Base64 エンコーダ・デコーダの標準化

Base64.Encoder encoder = Base64.getEncoder();!//Base64.Encoder encoder = Base64.getMimeEncoder(); //MIME 76文字で改行!String original = ”エンコードしたい文字列";!String encodedString = encoder.encodeToString(original.getBytes(StandardCharsets.UTF_8));!!byte[] decodedBytes = Base64.getDecoder().decode(encodedString);!//byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedString);!System.out.println(“デコード後:" + new String(decodedBytes, "utf-8"));

JEP 135 : Base64 エンコード・デコード

Page 70: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 70

•  sun.nio.cs の再実装プロジェクト •  パフォーマンス向上、メンテナンス性の向上 •  Java SE 7 でほぼ 80 % の Charset が再実装済み •  残りの Charset を再実装、

•  JIS-X_0208/0212 の日本語 Charaset など

•  sun.nio.cs.ArrayDecoder/Encoder の実装 •  new String(byte[]) , String.getBytes() のパフォーマンス改善

•  プロバイダに対する起動時(アクセス)のパフォーマンス改善

JEP 112 : Charset の実装改善

Page 71: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 71

•  パフォーマンスに影響なくコア・ライブラリ(ヒープ)のメモリ使用量を削減

ご参考: http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-January/013401.html

例: GlassFish v4.0.1 を起動した際のヒープ使用量 jdk1.7.0_51 : 217.79 MB jdk1.8.0-b128 : 197.54 MB

JEP 149 : ライブラリのメモリ使用量の削減

Page 72: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 72

apt を削除し JSR-269 に完全移行 JSR-269: Pluggable Annotation Processing API JSR-269 の関連パッケージ •  javax.annotation.processing!•  javax.lang.model!•  javax.lang.model.element!•  javax.lang.model.type!•  javax.lang.model.util

JEP 117 : apt ツールの削除

Page 73: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 73

javadoc コマンドを使用し、ドキュメント中に含まれるコメントの構文に問題が存在するか否かの検証

> javadoc -Xdoclint!> javadoc –Xdoclint:(all|none|[-]<group>)!

JEP 172 : DocLint ツールの提供

Page 74: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 74

javax.tools パッケージには、プログラムからコンパイラなどを呼び出す API が提供されているが、同パッケージ内にJavadoc を操作するAPIも追加 javax.tools に追加された Javadoc 操作関連用クラス

•  javax.tools.DocumentationTool!•  javax.tools.DocumentationTool.DocumentationTask!•  javax.tools.DocumentationTool.Location!

JEP 106 : Javadoc 操作用 API の提供

Page 75: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 75

JDK 開発者の為の機能

参照: http://docs.oracle.com/javase/8/docs/jdk/api/javac/tree/index.html

Javadoc を抽象構文木で解析しコメント取得などを行う為の API を提供

•  com.sun.source.util.DocTrees のユーティリティ・クラスを使用し DocCommentTree を取得

この API を使用し javadoc コマンドの ‒doclint オプションを実装

•  ご参照:JEP 172 : DocLint ツールの提供

※ @Exported アノテーションが付加されているため   一般利用も可能

JEP 105 : DocTree API の提供

Page 76: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 76

JEP 178 : 静的リンクされた JNI ライブラリ

開発者が、共有ライブラリを使用せずJavaの実行環境とネィティブのアプリケーションコード、Java アプリケーションのコードをまとめて一つの実行可能なバイナリにパッケージ化可能 既存のコード修正は不要 System.loadLibrary(“foo”)はスタティック、ダイナミック共にロード可能

“libname” という名のスタティック・ライブラリを呼び出した場合

# System.loadLibrary("libname") 「JNI_OnLoad_libname 」という名の関数にエキスポートされ呼び出される

Page 77: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 77

•  JEP 155 に関連し修正 •  ハッシュ競合が多数発生する状況でのパフォーマンス改善

•  内部実装を Linked List から Balanced Tree に変更

JEP 180 : HashMap の実装改善

Page 78: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 78

JEP 177 : DecimalFormat#format の改善

•  整数と浮動小数点の数値特性を活用し、小数点以下2桁または3桁持つ場合の処理を高速化

•  処理負荷の高い浮動小数点で処理するのではなく、100.0, 1000.0 の数を掛けて整数にした後で処理を実施

Page 79: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 79

•  Java SE 8 で追加された言語仕様の変更点をモデルに反映

JEP 119 : コア・リフレクション API に基づく      javax.lang.model の実装

追加されたインタフェース・クラス 追加されたインタフェース・クラス javax.lang.model.AnnotatedConstruct javax.lang.model.util.ElementScanner8

javax.lang.model.type.IntersectionType javax.lang.model.util.ElementKindVisitor8

javax.lang.model.util.TypeKindVisitor8 javax.lang.model.util.AbstractTypeVisitor8

javax.lang.model.util.SimpleTypeVisitor8 javax.lang.model.util.AbstractElementVisitor8

javax.lang.model.util.SimpleElementVisitor8 javax.lang.model.util.AbstractAnnotationValueVisitor8

javax.lang.model.util.SimpleAnnotationValueVisitor8

Page 80: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 80

その他:I/O 関連:BufferedReader#lines

//ファイルの内容を読み込みソートして出力する例 try (BufferedReader reader = Files.newBufferedReader(! Paths.get("/tmp/test.txt"))) {! reader.lines().sorted().forEach(System.out::println);!} catch (IOException ex){! Logger.getLogger(FilesTest.class.getName()).log(Level.SEVERE, null, ex);!}

•  BufferedReader に Stream を返す lines() メソッドが追加

Page 81: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 81

その他:I/O 関連

//ファイルの内容を読み込みソートして出力する例 try (BufferedReader reader = Files.newBufferedReader(! Paths.get("/tmp/test.txt"))) {! reader.lines().sorted().forEach(System.out::println);!} catch (IOException ex){! Logger.getLogger(FilesTest.class.getName()).log(Level.SEVERE, null, ex);!}

•  Files に newBufferedReader() メソッドが追加 •  BufferedReader に Stream を返す lines() メソッドが追加

Page 82: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 82

その他:I/O 関連

//ファイルの内容を読み込みソートして出力する例 try (BufferedReader reader = Files.newBufferedReader(! Paths.get("/tmp/test.txt"))) {! reader.lines().sorted().forEach(System.out::println);!} catch (IOException ex){! Logger.getLogger(FilesTest.class.getName()).log(Level.SEVERE, null, ex);!}

•  Files に newBufferedReader() メソッドが追加 •  BufferedReader に Stream を返す lines() メソッドが追加

Page 83: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 83

その他:String#join

String message = String.join("-", "Java", "is", "cool");!//結果:Java-is-cool!!String csv = String.join(",","element1","element2","element3");!//結果:element1,element2,element3

•  指定したデリミタで文字を結合

Page 84: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 84

その他:オーバ・フロー対策の算術演算

和:java.lang.StrictMath#addExact!差:java.lang.StrictMath#subtractExact!積:java.lang.StrictMath#multiplyExact!商:java.lang.StrictMath#floorDiv

•  java.lang.StrictMath による加減乗除 •  オーバ・フロー時に ArithmeticException 例外を送出 •  int, long などそれぞれで用意

Page 85: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 85

Language

Core Libraries

Internationalisation

Security

Platform

Virtual machine

Page 86: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 86

•  Java SE 8 で CLDR の利用はデフォルトで無効 •  デフォルトの設定: java.locale.providers=JRE,SPI!

•  CLDR の有効化には java.locale.providers システムプロパティに記述 例: java.locale.providers=CLDR,HOST,SPI,JRE!

•  LDML フォーマットからロケールデータファイルを生成する内部ツール •  JDK をビルドする際に使用する内部ツール (CLDRConverter)

•  ロケールデータのパッケージ化とモジュール形式でインストール方法を提供

JDK 開発者の為の機能

JDK 開発者の為の機能

JEP 127 : CLDR データへの対応

Page 87: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 87

•  BCP47言語タグ(RFC5646を参照)を使用し、アプリケーションで、RFC4647に準拠した方法で、利用者の言語環境設定を特定するAPIを定義 public void filterTest() {! //フィルタをするためのLocaleのリストを作成(ここではダミーで getAvailableLocaleを使用)! List<Locale> list = Arrays.asList(DateFormat.getAvailableLocales());! // ユーザの言語設定のプライオリティ・リストを表現! String ranges = "en-*;q=0.5,*-JP;q=1.0";! List<Locale.LanguageRange> languageRanges = ! Locale.LanguageRange.parse(ranges);! // リスト中から Locale オブジェクトのフィルタリングし出力! List<Locale> results = Locale.filter(languageRanges, list);! results.stream().forEach(System.out::println);! // ベスト・マッチするロケールの取得! Locale bestMatch = Locale.lookup(languageRanges, list);! System.out.println("BEST MATCH : " + bestMatch);}

JEP 128 : BCP 47 によるロケール・マッチ

Page 88: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 88

Java SE 7 では Unicode 6.0 をサポート

2012 年 2 月 Unicode 6.1 •  java.lang.Character.UnicodeBlock に 11 の新しいブロックを追加 •  java.lang.Character.UnicodeScript に 7 の新しいスクリプトを追加 •  java.lang.Character, String 他のクラスに 733 の新しい文字を追加

2012 年 9 月 Unicode 6.2 •  トルコ通貨記号 (U+20BA) のサポート

JEP 133 : Unicode 6.2 へ対応

Page 89: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 89

java.lang.Character.UnicodeBlock に 追加されたフィールド

説明

ARABIC_EXTENDED_A 「アラビア語拡張A」のUnicode文字ブロックの定数

SUNDANESE_SUPPLEMENT 「スンダサプリメント」のUnicode文字ブロックの定数 MEETEI_MAYEK_EXTENSIONS 「Meetei Mayek拡張機能」のUnicode文字ブロックの定数

MEROITIC_HIEROGLYPHS 「Meroitic ヒエログリフ」のUnicode文字ブロックの定数

MEROITIC_CURSIVE 「Meroitic CURSIVE」のUnicode文字ブロックの定数

SORA_SOMPENG 「Sora Sompeng」のUnicode文字ブロックの定数

CHAKMA 「チャクマ」のUnicode文字ブロックの定数

SHARADA 「Sharada」のUnicode文字ブロックの定数

TAKRI 「Takri」のUnicode文字ブロックの定数

MIAO 「ミャオ」のUnicode文字ブロックの定数

ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS 「アラビア数学アルファベット記号」のUnicode文字ブロックの定数

JEP 133 : UnicodeBlock へ追加されたブロック

Page 90: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 90

java.lang.Character.UnicodeScript に 追加されたフィールド

説明

CHAKMA 「チャクマ」の Unicode スクリプト

MEROITIC_CURSIVE 「MEROITIC CURSIVE」のUnicode スクリプト MEROITIC_HIEROGLYPHS 「MEROITIC HIEROGLYPHS」のUnicode スクリプト

MIAO 「ミャオ」のUnicode スクリプト

SHARADA 「Sharada」のUnicode スクリプト

SORA_SOMPENG 「Sora Sompeng」のUnicode スクリプト

TAKRI 「Takri」のUnicode のUnicode スクリプト

JEP 133 : UnicodeScript へ追加されたスクリプト

Page 91: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 91

Language

Core Libraries

Virtual machine

Security

Platform

Internationalisation

Page 92: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 92

指定した品質と応答性で動作するような乱数生成用のAPIを強化 $JAVA_HOME/jre/lib/security/java.security securerandom.strongAlgorithms セキュリティ・プロパティに指定されているアルゴリズムとプロバイダを使用して乱数を生成

ご参照:実装としてsecurerandom.strongAlgorithmsに指定可能なアルゴリズムとプロバイダ名一覧 http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SecureRandomImp

SecureRandom random = SecureRandom.getInstanceStrong();! byte bytes[] = new byte[20];! random.nextBytes(bytes);

JEP 123 : 安全で設定可能な乱数生成

Page 93: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 93

OS アルゴリズム名 プロバイダ名

Solaris

1. PKCS11 SunPKCS11

2. NativePRNG Sun

3. SHA1PRNG Sun

4. NativePRNGBlocking Sun

5. NativePRNGNonBlocking Sun

Linux

1. NativePRNG Sun

2. SHA1PRNG Sun

3. NativePRNGBlocking Sun

4. NativePRNGNonBlocking Sun

OS X

1. NativePRNG Sun

2. SHA1PRNG Sun

3. NativePRNGBlocking Sun

4. NativePRNGNonBlocking Sun

Windows 1. SHA1PRNG Sun

2. Windows-PRNG* SunMSCAPI

JEP 123 : java.security に指定可能なプロパティ

Page 94: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 94

•  ベストエフォート型の証明書失効チェックのためのAPIをサポート 証明書の失効情報を保持しているサーバーに接続することができない場合に、ベストエフォート型のチェックを行った場合、証明書は無効と判定しない

•  証明書チェーン内の全ての証明書でなく、証明書の失効ステータスを独立して確認 •  システムプロパティに指定されている失効チェックオプションのAPI 失効チェックのタイプに固有のパラメータを CRLs もしくは OCSPを使って追加

JEP 124 : 証明書の失効確認用 API の拡張

Page 95: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 95

•  証明書失効確認メソッドの追加 •  java.security.cert.CertPathValidatorSpi#engineGetRevocationChecker •  java.security.cert.CertPathValidator#getRevocationChecker

•  java.security.cert.CertPathBuilderSpi#engineGetRevocationChecker •  java.security.cert.CertPathBuilder#getRevocationChecker

•  新規追加されたクラス •  java.security.cert.CertPathChecker •  java.security.cert.PKIXRevocationChecker •  java.security.cert.PKIXRevocationChecker.Option [Enum]

JEP 124 : 証明書の失効確認用 API の拡張

Page 96: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 96

CertPathValidator cpv = CertPathValidator.getInstance("PKIX");!PKIXRevocationChecker prc = !                (PKIXRevocationChecker)cpv.getRevocationChecker();!prc.setOptions(EnumSet.of(Option.SOFT_FAIL));!PKIXParameters params = new PKIXParameters(keystore);!params.addCertPathChecker(prc);!CertPathValidatorResult res = cpv.validate(certpath, params);

PKIX の CertPathValidator で証明書チェーンを検証 •  ベストエフォート型のチェック(SOFT_FAIL) ネットワーク・エラー時無効と判定しない

JEP 124 : 証明書の失効確認用 API の拡張

Page 97: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 97

CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX"); !PKIXRevocationChecker prc = ! (PKIXRevocationChecker)cpb.getRevocationChecker(); !prc.setOCSPResponderURI(new URI("http://localhost")); !PKIXBuilderParameters params = new PKIXBuilderParameters(keystore, constraints); !params.addCertPathChecker(prc); !CertPathBuilderResult res = cpb.build(params);

PPKIX CertPathBuilderで OCSPレスポンダを使用し証明書チェーンを検証

JEP 124 参照情報: http://cr.openjdk.java.net/~mullan/jeps/124/api/draft.03/README.html

※OCSP の証明書失効用の各プロパティは jre/lib/security/java.security で設定

JEP 124 : 証明書の失効確認用 API の拡張

Page 98: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 98

新しいネットワークに対するアクセス制限方法 (URLによる) を追加 SocketPermission (IPアドレス) によるアクセス制限設定は非推奨 アプレットや Java Web Start のアプリケーション用のアクセス制限 起動したサーバに対する接続許可を与える際に使用 JAR ファイルのマニュフェスト・ファイルに権限属性の設定が必要

HTTP メソッドによる制限指定も可能

ご参照: http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html#URLPermission

JEP 184 : URL によるアクセス制御

Page 99: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 99

grant codeBase "http://myhost.domain.com" {! permission java.net.SocketPermission "myhost.domain.com:8080","listen";! permission java.net.URLPermission "http://myhost.domain.com/restricted" ,"GET,POST";! permission java.util.PropertyPermission "*","read";!};!

JEP 184 : URL によるアクセス制御例

SecurityManager manager = System.getSecurityManager();! if (manager != null) {! try {! manager.checkPermission(! new URLPermission("http://myhost.domain.com/restricted/-", "GET,POST"));! } catch (SecurityException se) {! //セキュリティ例外 }}!

Page 100: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 100

サーバ・アプリケーションにおける SSL/TLS SNI 拡張のサポート 

SNI (Server Name Indication) 拡張はハンドシェイクの際にどのサーバ名に対してクライアントが接続を試みているかを示すためのSSL/TLS拡張

サーバ名を示す情報(SNI)は、特定の SSLSocket もしくは SSLEngine のインスタンスが接続を受け付けるか否かを決めるために利用可能

Java SE 7 ではクライアント・アプリケーション用の SNI 拡張を提供 Java SE 8 ではサーバ・アプリケーション用の SNI 拡張を提供

関連クラス SNIServerName Class SNIMatcher Class SNIHostName Class

JEP 114 : サーバ用 SNI 拡張のサポート

Page 101: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 101

SSLServerSocket sslServerSocket = ...;!!SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.(com|org)");!Collection<SNIMatcher> matchers = new ArrayList<>(1);!matchers.add(matcher);!!SSLParameters params = sslServerSocket.getSSLParameters();!params.setSNIMatchers(matchers);!sslServerSocket.setSSLParameters(params);!!SSLSocket sslSocket = sslServerSocket.accept();!

ご参照: JSSE Reference Guide : Server Name Indication (SNI) Extension http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SNIExtension

JEP 114 : サーバ用 SNI 拡張のサポート

Page 102: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 102

プログラム上から、一時的にパーミッションを限定的に変更し処理可能

doPrivileged() メソッド中はアクセス制御コンテキストの走査を停止

PrivilegedAction は run() が一つのインタフェースのため Lambda で記述可能 任意のオブジェクトを返す事も可能 : PrivilegedAction <Object>!

AccessControlContext acc = AccessController.getContext();!AccessController.doPrivileged (! (PrivilegedAction<Void>) () -> {! //ここでは限定的にパーミッションが変更されているので、何らかの処理を実装 Path file = Paths.get("/temp/someFile");! return null;! }, acc, new FilePermission("/temp/*", "read”));

JEP 140 : 部分的なコードに限定した特権処理

Page 103: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 103

JCA/JCE プロバイダで AEAD/GCM の Cipher Suite のサポート RFC5288 にGalois Counter Mode (GCM)で AES(AES-GCM)の使用が記載されており、TLS における鍵交換方法として暗号スイートがまとめられている。 Java SE 7 で定義済みで Java SE 8 でサポートを開始 Java SE 8 の SunJSSE プロバイダで TLS 1.2 用にサポートされる CipherSuite の一覧は次ページ

!!

JEP 115 : AEAD Cipher Suite のサポート

Page 104: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 104

標準の JDK 8 に追加された AES-GCM CipherSuite (インストール時のデフォルト) Unlimited Strength Java(TM) Cryptography Extension Policy Files を適用した場合

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_128_GCM_SHA256

TLS_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256

TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 TLS_DHE_DSS_WITH_AES_128_GCM_SHA256

TLS_DHE_DSS_WITH_AES_256_GCM_SHA384

※ Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 は別途ダウンロードが必要 http://www.oracle.com/technetwork/java/javase/downloads/index.html

JEP 115 : AEAD Cipher Suite のサポート

Page 105: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 105

サポートされているがデフォルトで無効 定義されているが未実装もしくは未サポート

TLS_DH_anon_WITH_AES_256_GCM_SHA384 TLS_DH_RSA_WITH_AES_128_GCM_SHA256

TLS_DH_anon_WITH_AES_128_GCM_SHA256 TLS_DH_RSA_WITH_AES_256_GCM_SHA384

TLS_DH_DSS_WITH_AES_128_GCM_SHA256

TLS_DH_DSS_WITH_AES_256_GCM_SHA384

//サポートされている AEAD CipherSuite の取得と出力例 SSLContext context = SSLContext.getDefault();!SSLSocketFactory sfact = context.getSocketFactory();!List<String> data = Arrays.asList(sfact.getSupportedCipherSuites());!data.stream().filter(s -> s.contains(“GCM”).forEach(System.out::println);

JEP 115 : AEAD Cipher Suite のサポート

Page 106: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 106

US 国家安全保障局(NSA)が求める Suite B アルゴリズムに対応

•  NSA Suite B の暗号化アルゴリズムを OID に登録

•  Sun プロバイダの対応 2048 ビットの DSA キー・ペア生成と、2048 ビット DSA キー(SHA224withDSA, SHA256withDSA等)用の署名アルゴリズムのサポート

•  SunJCE プロバイダの対応 ディフィー・ヘルマンの鍵サイズ(1024-2048)制限を解除!

JEP 129 : NSA Suite B 暗号化アルゴリズム対応

Page 107: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 107

メッセージ・ダイジェスト SHA-2 に含まれる SHA-224 の実装改良 •  SHA-256 の省略版 •  112ビットのセキュリティ強度 // SHA-224 のメッセージ・ダイジェストを生成 MessageDigest md = MessageDigest.getInstance("SHA-224");!!// SHA224withRSA の署名を生成 Signature sig = Signature.getInstance("SHA224withRSA");! !// HmacSHA224 の KeyGenerator を生成 KeyGenerator kg = KeyGenerator.getInstance("HmacSHA224");! !// HmacSHA224 の Mac を生成 Mac mac = Mac.getInstance("HmacSHA224");!

JEP 130 : SHA-224 メッセージ・ダイジェストの改良

Page 108: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 108

AES 暗号を利用する場合、x86, x64 系の CPU で AES 命令が利用可能な場合にパフォーマンスが向上 HotSpot は AES 命令が利用可能な場合、自動的に AES 命令を生成

開発者は無意識で利用可能

ご参照: 「INTRODUCTION TO INTEL® AES-NI AND INTEL® SECURE KEY INSTRUCTIONS」 http://software.intel.com/en-us/articles/introduction-to-intel-aes-ni-and-intel-secure-key-instructions

JEP 164 : AES暗号パフォーマンスの向上      AES 命令に対応する CPU 向け

Page 109: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 109

Kerberos 5 の実装に2つの rcache タイプを追加 •  none : rcache 無し •  dfl : DFL スタイルのファイルベース rcache

acceptor の subkey をサポート

•  システム・プロパティで設定 •  sun.security.krb5.rcache •  sun.security.krb5.acceptor.subkey

ご参照: 「Kerberos Protocol Extensions: Service for User and Constrained Delegation Protocol」 http://msdn.microsoft.com/en-us/library/cc246071.aspx

JEP 113 : Kerberos 5 の実装に MS-SFU 拡張を追加

Page 110: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 110

JEP 121 : Passwordベース暗号用の強いアルゴリズム

SunJCE プロバイダでより強力なパスワードベース暗号化(PBE)アルゴリズムの 実装を提供 AES 暗号や SHA-2 に含まれるメッセージ・ダイジェストのような強度の高いアルゴリズムを使用した PBE アルゴリズムを実装

ご参照: 「Java Cryptography Architecture Oracle Providers Documentation for JDK 8:  SunJCE Provider」 http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider

Page 111: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 111

JEP 166 : JKS-JCEKS-PKCS12 キーストアの改良

JKS もしくは JCEKS のキー・ストアから PKCS#12 のキー・ストアへデータ移行を促進 新機能をサポートするために、キーストアAPIを強化 JEP-121で導入された強力な暗号化アルゴリズムを使用し、キー・ストア内の  データを保護するために使用可能

Page 112: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 112

JEP 131 : 64-bit Windows 用 PKCK#11暗号プロバイダの提供

64ビット Windows用 の JDK に SunPKCS11 プロバイダを提供 関連ディレクトリにインストールされるがデフォルトで無効 使用するには、アプリケーションが独自の構成ファイルを設定 SunPKCS11プロバイダリファレンスガイド仕様に従い ネイティブのPKCSの#11ライブラリの位置を指定

Page 113: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 113

Language

Core Libraries

Virtual machine

Security

Platform

Internationalisation

Page 114: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 114

JavaFX アプリケーションを起動するため java コマンドの改良 •  main() メソッドを含むクラスの実行 •  実行可能な jar ファイルの MANIFEST ファイル中に記載された“Main-Class: ” の内容に従い JavaFX アプリケーションを起動

•  実行可能 jar ファイルは javafxpackager コマンドで作成 •  main() メソッドは未記述でも起動可能

JEP 153 : JavaFX アプリケーションの起動

Page 115: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 115

Java 実行環境上で動作する JavaScript エンジンの提供 •  ECMAScript Edition 5.1 の言語仕様に対応 •  Java コードから JavaScript コードの呼び出しが可能 •  JavaScript コードから Java コードの読み出しが可能 •  JavaScript の実行コマンド (jjs, jrunscript) を提供 参考:

Java Scripting Programmer's Guide http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/index.html Nashorn User's Guide http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/index.html http://download.java.net/jdk8/docs/technotes/guides/scripting/nashorn/ NetBeans 8.0 における JavaScript コードのデバッグ http://wiki.netbeans.org/NetBeans_80_NewAndNoteworthy#JavaScript_in_Nashorn

JEP 174 : Nashorn JavaScript エンジン

Page 116: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 116

> $JAVA_HOME/jre/bin/jjs!jjs> 'Hello World'!Hello World!jjs> 'Hello World'.length!11!jjs> function sum(a,b){ return a + b }!function sum(a,b){ return a+b }!jjs> sum(10,20)!30

jjs コマンド JEP 174 : JavaScript エンジン: jjs コマンド

Page 117: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 117

#!/usr/bin/jjs -scripting!#!# Shell style comments!var files =`ls`.trimRight().split("\n");!!files.forEach(function(file) {! if (file.endsWith(".txt")) {! print(file);! }!});!

JavaScript ファイルの実行

もしくは、JDK の jrunscript を実行 > jrunscript -f <script file>!

JEP 174 : JavaScript ファイルの実行

Page 118: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 118

各APIにどのプロファイルで 利用可能か記載されている

参考:https://blogs.oracle.com/jtc/entry/a_first_look_at_compact

JEP 161 : Compact プロファイル

Page 119: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 119

java.io! java.nio.charset! java.text.spi! java.util.function! javax.net!

java.lang.annotation! java.nio.charset.spi! java.time! java.util.jar! javax.net.ssl!

java.lang.invoke! java.nio.file! java.time.chrono! java.util.logging! javax.script!

java.lang.ref! java.nio.file.attribute! java.time.format! java.util.regex! javax.security.auth!

java.lang.reflect! java.nio.file.spi! java.time.temporal! java.util.spi! javax.security.auth.callback!

java.math! java.security! java.time.zone! java.util.stream! javax.security.auth.login!

java.net! java.security.cert! java.util! java.util.zip! javax.security.auth.spi!

java.nio! java.security.interfaces! java.util.concurrent! javax.crypto! javax.security.auth.x500!

java.nio.channels! java.security.spec! java.util.concurrent.atomic! javax.crypto.interfaces! javax.security.cert!

java.nio.channels.spi! java.text! java.util.concurrent.locks! javax.crypto.spec!

JEP 161 : Compact プロファイル 1 に含まれる      パッケージ一覧

Page 120: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 120

java.rmi javax.xml javax.xml.transform.stax org.xml.sax.helpers

java.rmi.activation javax.xml.datatype javax.xml.transform.stream

java.rmi.dgc javax.xml.namespace javax.xml.validation

java.rmi.registry javax.xml.parsers javax.xml.xpath

java.rmi.server javax.xml.stream org.w3c.dom

java.sql javax.xml.stream.events org.w3c.dom.bootstrap

javax.rmi.ssl javax.xml.stream.util org.w3c.dom.events

javax.sql javax.xml.transform org.w3c.dom.ls

javax.transaction javax.xml.transform.dom org.xml.sax

javax.transaction.xa javax.xml.transform.sax org.xml.sax.ext

JEP 161 : Compact プロファイル 2 に含まれる      パッケージ一覧 (+プロファイル 1)

Page 121: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 121

java.lang.instrument javax.management.loading javax.naming.event javax.xml.crypto.dom

java.lang.management javax.management.modelmbean javax.naming.ldap javax.xml.crypto.dsig

java.security.acl javax.management.monitor javax.naming.spi javax.xml.crypto.dsig.dom

java.util.prefs javax.management.openmbean javax.security.auth.kerberos javax.xml.crypto.dsig.keyinfo

javax.annotation.processing javax.management.relation javax.security.sasl javax.xml.crypto.dsig.spec

javax.lang.model javax.management.remote javax.sql.rowset org.ieft.jgss

javax.lang.model.element javax.management.remote.rmi javax.sql.rowset.serial

javax.lang.model.type javax.management.timer javax.sql.rowset.spi

javax.lang.model.util javax.naming javax.tools

javax.management javax.naming.directory javax.xml.crypto

JEP 161 : Compact プロファイル 3 に含まれる      パッケージ一覧 (+プロファイル 2)

Page 122: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 122

•  クラス・ロード時、クラス間の相互参照の問題を修正 •  独自のサービス・プロバイダ実装をjava.util.ServiceLoaderで再実装

•  例:JAXP

•  クラスの依存関係を出力する新規コマンド (jdeps) を提供 •  使用方法: jdeps <options> <classes...>!!

•  $JAVA_HOME 内のファイル構成を再検討 •  一部ファイルを将来的に移動可能にする準備!•  例:通過のプロパティファイルなど!

JEP 161 : モジュール化への準備

Page 123: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 123

•  モジュール化へ障害となるのJava SE API を非推奨 •  java.util.logging.LogManager.addPropertyChangeListener!•  java.util.logging.LogManager.removePropertyChangeListener!•  java.util.jar.Pack200.Packer.addPropertyChangeListener!•  java.util.jar.Pack200.Packer.removePropertyChangeListener!•  java.util.jar.Pack200.Unpacker.addPropertyChangeListener!•  java.util.jar.Pack200.Unpacker.removePropertyChangeListener!•  com.sun.security.auth.callback.DialogCallbackHandler!!

•  モジュール化への障害となる API の削除 •  com.sun.security.auth.PrincipalComparator!

•  上記の代わりに java.security.Principal に implies メソッドを追加 ご参照:http://openjdk.java.net/projects/jigsaw/dashboards/modularization

JEP 162 : モジュール化への準備

Page 124: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 124

/jdk1.8.0.jdk/Contents/Home/bin/jdeps -v ConcurrentTest.class !ConcurrentTest.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar! com.yoshio3.javase8.sample.ConcurrentTest -> java.io.PrintStream ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.Class ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.Object ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.String ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.StringBuilder ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.System ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.invoke.CallSite ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.invoke.LambdaMetafactory ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.invoke.MethodHandle ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.invoke.MethodHandles ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.invoke.MethodHandles$Lookup ! com.yoshio3.javase8.sample.ConcurrentTest -> java.lang.invoke.MethodType ! com.yoshio3.javase8.sample.ConcurrentTest -> java.util.Arrays ! com.yoshio3.javase8.sample.ConcurrentTest -> java.util.List ! com.yoshio3.javase8.sample.ConcurrentTest -> java.util.concurrent.ConcurrentHashMap ! com.yoshio3.javase8.sample.ConcurrentTest -> java.util.concurrent.atomic.LongAdder ! com.yoshio3.javase8.sample.ConcurrentTest -> java.util.function.BiConsumer!  …… 以降略!

JEP 162 : jdeps コマンドの提供 指定したクラスの依存関係を取得可能

Page 125: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 125

JDK 内部で利用可能な @jdk.Exported アノテーションを提供 http://hg.openjdk.java.net/jdk8/tl/langtools/file/379c04c090cf/src/share/classes/jdk/Exported.java JDK 固有の型・パッケージを判定し JDK の実装外部でも使用可能か否かを示す Java SE の名前空間(java, javax パッケージ)以外のパッケージや型に適用 例: JDK に含まれる com.sun パッケージの一部は汎用的に JDK 外部で使用可能でそれらに @jdk.Exported を指定、一方で com.sun パッケージの多くは汎用的な使用が非推奨 このアノテーションで、それらの違いをプログラム的に示す

Java SE 8 で@jdk.Exported が付加されたパッケージ,クラスの例 Java Debug Interface (com.sun.jdi) Management extensions (com.sun.management)

Attach API (com.sun.tools.attach) JConsole Plugin API (com.sun.tools.jconsole)

SCTP API (com.sun.nio.sctp) JDK-specific API to JAAS (com.sun.security.auth)

HTTP server API (com.sun.net.httpserver) JDK-specific JGSS API (com.sun.security.jgss)

JEP 179:汎用で利用可能な com.sun パッケージを明示

Page 126: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 126

JDK の開発者が JDK をより簡単にビルドできるように Autoconf ベースの ビルドシステムに変更 以前は JDK のビルド環境を構築する事が面倒だった(Ant等を利用していた) が、より容易に JDK をビルドできるように変更 (GNU make 3.8.1 以上) # configure!# make!

JDK 開発者の為の機能

JEP 138 : Autoconf ベースのビルドに変更

OpenJDK プロジェクトへの参加が容易

Page 127: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 127

JDK 開発者の為の機能

JDK の開発者がマルチ・コア環境でJDK の Java クラスファイルをコンパイルする際、マルチコアを利用してインクリメンタル・ビルドができるように javac のラッパーライブラリを作成 !現在は、一般向けの提供は無く JDK のビルドにのみ提供!JDK(Nashorn含む)のビルドに利用!!

JEP 139 : JDK ビルド・スピードの改善      JDK 開発者用マルチコア対応 javac ライブラリ

Page 128: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 128

Language

Core Libraries

Internationalisation

Security

Platform

Virtual machine

Page 129: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 129

HotSpot VM と JRockit VM の統合プロジェクトの成果物

•  JRockit は Permanent 領域は存在しなかった •  Permanent 領域には、ロードされたクラスやメソッドの情報、static クラス、文字列オブジェクトの正規表現(Java SE 6まで)等を保存していた

java コマンド・パラメータ PermSize と MaxPermSize の削除 Java SE 8 における実装

•  ロードされたクラスやメソッドの情報 : native のメモリに移動 •  static クラス、文字列オブジェクトの正規表現:Java Heap に移動

JEP 122 : Permanent 領域の削除

Page 130: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 130

Java SE 8 で非推奨 (ワーニング出力) となった GC

•  -Xincgc •  -XX:+CMSIncrementalMode (CMSIncrementalにも影響) •  -XX:+UseParNewGC •  -XX:+UseConcMarkSweepGC を指定した場合 -XX:-UseParNewGC は非推奨 •  -XX:+UseConcMarkSweepGC を指定しない場合 -XX:+UseParNewGC は非推奨

組み合わせで影響のある GC -XX:-UseParNewGC -XX:+UseConcMarkSweepGC

-XX:+UseParNewGC !

-Xincgc !

-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC

-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC !

JEP 173 : あまり利用されない GC の組み合わせを排除

Page 131: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 131

Lambda 式の導入に伴う改善 Method Handle と InvokeDynamic の性能、品質、移植性を向上 Java VM におけるアセンブル・コードの削減

•  methodHandles_<arch>.cpp から殆どのアセンブルコードを削除 •  Java SE 7 (7000) -> Java SE 8 (100)

メソッドのハンドル処理中におけるネィティブ呼び出しや複雑処理の頻度を削減 Java VM 内で JSR 292 用に実装した複雑な構造などを排除

JEP 160 : メソッド・ハンドルの実装改善

Page 132: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 132

下記 2 オプションを追加

-XX:+UnlockDiagnosticVMOptions !-XX:+VerboseVerification!

•  何らかの原因で Java のバイトコード・ベリファイアで VerifyError が発生した場合、本オプションを指定し詳細情報を出力し原因究明が可能 •  例:javac 以外のツールで後からバイト・コードを追加したような場合

•  StackMapTable の情報を出力 •  Java SE 6 (クラス・ファイル・フォーマット 50.0)以上で利用可能 •  http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4

JEP 136 : Verification Error の詳細を出力

Page 133: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 133

組み込み向けJava VM で使用してきたメモリ使用量削減技術を Java SE の HotSpot に適用

•  あまり使われないフィールドをクラス、メソッド等の外部に保存 •  可能な限り小さい構造体フィールドを全て作る •  特定のフィールドをより小さい型におさめるためにエンコード

JEP 147 : クラス Metadata のメモリ使用量削減

Page 134: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 134

その他 : Java Mission Control 5.3

高機能な JavaVM 解析ツール •  パフォーマンス解析 •  ヒープ解析 •  レイテンシ解析

稼働中システムに低影響で 監視・管理が可能 詳細なデータ分析も可能

Page 135: New Feature Of Java SE 8

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 135