New Feature Of Java SE 8

24,661 views
24,956 views

Published on

I explained the new features of Java SE 8.

Published in: Technology
0 Comments
39 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
24,661
On SlideShare
0
From Embeds
0
Number of Embeds
15,973
Actions
Shares
0
Downloads
124
Comments
0
Likes
39
Embeds 0
No embeds

No notes for slide

New Feature Of Java SE 8

  1. 1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.1
  2. 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです 。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むこ とはできません。以下の事項は、マテリアルやコード、機能を提供することをコミッ トメント(確約)するものではないため、購買決定を行う際の判断材料になさらない で下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時 期については、弊社の裁量により決定されます。 Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。
  3. 3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3 7 8 9 … •  Productivity (生産性) •  Performance (パフォーマンス) •  Universality (普遍性) •  Modularity (モジュール化) •  Integration (統合) •  Serviceability (サービス提供力)
  4. 4. 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:早く実装が可能な一部機能を先にリリース
  5. 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5 7 Project Coin (JSR 334) NIO.2 (JSR 203) Fork/Join Framework InvokeDynamic (JSR 292) 2011 年 7 月 28 日 正式リリース
  6. 6. 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 へ持ち越し
  7. 7. 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年初旬に変更
  8. 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 に決定
  9. 9. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.9 祝 Java SE 8 正式リリース 2014 年 03 月 18 日
  10. 10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10 JSR- 337 : Java SE 8
  11. 11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11
  12. 12. 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)
  13. 13. 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)
  14. 14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14 Java リッチクライアント開発技術 16:30∼17:20 JavaFX ‒ GUI by Illusion 櫻庭祐一さん(@skrb)
  15. 15. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.15 Compact プロファイル 各APIにどのプロファイルで 利用可能か記載されている 参考:https://blogs.oracle.com/jtc/entry/a_first_look_at_compact
  16. 16. 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)
  17. 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17 重要資料のご紹介
  18. 18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18 Java リリース・ノート http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html
  19. 19. 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
  20. 20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20 Java Platform Standard Edition 8 ドキュメント http://docs.oracle.com/javase/8/docs/
  21. 21. 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
  22. 22. 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
  23. 23. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.23 Java サポート・ロードマップ http://www.oracle.com/technetwork/java/eol-135779.html
  24. 24. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24 Java チュートリアル http://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html
  25. 25. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.25 is Back
  26. 26. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26
  27. 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27
  28. 28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28
  29. 29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.29
  30. 30. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.30 日程:2014 年 5 月22 日 場所:品川プリンスホテル 参加費用 : 無料
  31. 31. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31 Java Day Tokyo 2014 日本オラクルからの Java SE 8 ローンチ・イベント Lambda の開発者も来る !!
  32. 32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.32 登録開始予定 : 4 月 2 日 (水)
  33. 33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.33 JJUG CCC Spring 2014 日程:  5 / 18 (日) 場所:  ベルサール西新宿 参加費用:無料
  34. 34. 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 祭り
  35. 35. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.35
  36. 36. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.36 Java SE 8 参考資料
  37. 37. 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
  38. 38. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.38 JDK に対する拡張 : JEP JDK Enhancement : 拡張 Proposals : 提案 ご参照:http://openjdk.java.net/projects/jdk8/features
  39. 39. 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 に記載される拡張機能 一覧
  40. 40. 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 に記載される拡張機能 一覧
  41. 41. 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 に記載される拡張機能 一覧
  42. 42. 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 に記載される拡張機能 一覧
  43. 43. 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 に記載される拡張機能 一覧
  44. 44. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.44
  45. 45. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.45 Language Core Libraries Virtual machine Security Platform Internationalisation
  46. 46. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.46 Language Core Libraries Virtual machine Security Platform Internationalisation
  47. 47. 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つ持つ 匿名インナー・クラスを 簡単に書く事が可能
  48. 48. 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 : 拡張メソッド
  49. 49. 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 の型に対するアノテーション
  50. 50. 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 の型に対するアノテーション
  51. 51. 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 の型に対するアノテーション
  52. 52. 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 の型に対するアノテーション
  53. 53. 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 : ターゲット型推論の強化
  54. 54. 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 : ターゲット型推論の強化
  55. 55. 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 : リフレクションでメソッド引数を取得可能
  56. 56. 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 : 同一アノテーションの繰返し記述
  57. 57. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.57 Language Core Libraries Virtual machine Security Platform Internationalisation
  58. 58. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.58 •  標準ライブラリの近代化 •  パフォーマンスの改善 Lambda 実装に invokedynamicを使用 •  拡張メソッドの良い実装例を提供 JEP 109 : Lambda導入に伴うライブラリ拡張
  59. 59. 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 : コレクションに対する一括操作
  60. 60. 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 の改善
  61. 61. 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 の改善
  62. 62. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.62 •  ForkJoinPool のパフォーマンス改善と新機能追加 •  新規追加メソッド •  ForkJoinPool.commonPool() : 最適化された Fork/Join プールの作成 •  ForkJoinPool.getCommonPoolParallelism() JEP 155 : 並列処理用 API の改善
  63. 63. 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 : 配列の並列処理によるソート
  64. 64. 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
  65. 65. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.65 ZoneDateTime は指定したタイムゾーンの時間のポイント   (GregorianCalendar に類似) 日付や時間のフォーマットや解析に DateTimeFormatterを使用 JEP 150 : Date and Time API
  66. 66. 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 への更新
  67. 67. 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 インタフェースの変更点
  68. 68. 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 での変更クラス
  69. 69. 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 エンコード・デコード
  70. 70. 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 の実装改善
  71. 71. 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 : ライブラリのメモリ使用量の削減
  72. 72. 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 ツールの削除
  73. 73. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.73 javadoc コマンドを使用し、ドキュメント中に含まれるコメン トの構文に問題が存在するか否かの検証 > javadoc -Xdoclint! > javadoc –Xdoclint:(all|none|[-]<group>)! JEP 172 : DocLint ツールの提供
  74. 74. 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 の提供
  75. 75. 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 の提供
  76. 76. 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 」という名の関数にエキスポートされ呼び出される
  77. 77. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.77 •  JEP 155 に関連し修正 •  ハッシュ競合が多数発生する状況でのパフォーマンス改善 •  内部実装を Linked List から Balanced Tree に変更 JEP 180 : HashMap の実装改善
  78. 78. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.78 JEP 177 : DecimalFormat#format の改善 •  整数と浮動小数点の数値特性を活用し、小数点以下2桁また は3桁持つ場合の処理を高速化 •  処理負荷の高い浮動小数点で処理するのではなく、100.0, 1000.0 の数を掛けて整数にした後で処理を実施
  79. 79. 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
  80. 80. 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() メソッドが追加
  81. 81. 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() メソッドが追加
  82. 82. 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() メソッドが追加
  83. 83. 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 •  指定したデリミタで文字を結合
  84. 84. 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 などそれぞれで用意
  85. 85. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.85 Language Core Libraries Internationalisation Security Platform Virtual machine
  86. 86. 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 データへの対応
  87. 87. 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 によるロケール・マッチ
  88. 88. 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 へ対応
  89. 89. 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 へ追加されたブロック
  90. 90. 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 へ追加されたスクリプト
  91. 91. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.91 Language Core Libraries Virtual machine Security Platform Internationalisation
  92. 92. 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 : 安全で設定可能な乱数生成
  93. 93. 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 に指定可能なプロパティ
  94. 94. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.94 •  ベストエフォート型の証明書失効チェックのためのAPIをサポート 証明書の失効情報を保持しているサーバーに接続することができない場合に、ベ ストエフォート型のチェックを行った場合、証明書は無効と判定しない •  証明書チェーン内の全ての証明書でなく、証明書の失効ステータスを独立して確認 •  システムプロパティに指定されている失効チェックオプションのAPI 失効チェックのタイプに固有のパラメータを CRLs もしくは OCSPを使って追 加 JEP 124 : 証明書の失効確認用 API の拡張
  95. 95. 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 の拡張
  96. 96. 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 の拡張
  97. 97. 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 の拡張
  98. 98. 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 によるアクセス制御
  99. 99. 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) {! //セキュリティ例外 }}!
  100. 100. 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 拡張のサポート
  101. 101. 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 拡張のサポート
  102. 102. 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 : 部分的なコードに限定した特権処理
  103. 103. 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 のサポート
  104. 104. 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 のサポート
  105. 105. 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 のサポート
  106. 106. 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 暗号化アルゴリズム対応
  107. 107. 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 メッセージ・ダイジェストの改良
  108. 108. 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 向け
  109. 109. 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 拡張を追加
  110. 110. 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
  111. 111. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.111 JEP 166 : JKS-JCEKS-PKCS12 キーストアの改良 JKS もしくは JCEKS のキー・ストアから PKCS#12 のキー・ストアへデータ移行 を促進 新機能をサポートするために、キーストアAPIを強化 JEP-121で導入された強力な暗号化アルゴリズムを使用し、キー・ストア内の   データを保護するために使用可能
  112. 112. 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ライブラリの位置を指定
  113. 113. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.113 Language Core Libraries Virtual machine Security Platform Internationalisation
  114. 114. 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 アプリケーションの起動
  115. 115. 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 エンジン
  116. 116. 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 コマンド
  117. 117. 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 ファイルの実行
  118. 118. 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 プロファイル
  119. 119. 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 に含まれる      パッケージ一覧
  120. 120. 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)
  121. 121. 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)
  122. 122. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.122 •  クラス・ロード時、クラス間の相互参照の問題を修正 •  独自のサービス・プロバイダ実装をjava.util.ServiceLoaderで再実装 •  例:JAXP •  クラスの依存関係を出力する新規コマンド (jdeps) を提供 •  使用方法: jdeps <options> <classes...>! ! •  $JAVA_HOME 内のファイル構成を再検討 •  一部ファイルを将来的に移動可能にする準備! •  例:通過のプロパティファイルなど! JEP 161 : モジュール化への準備
  123. 123. 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 : モジュール化への準備
  124. 124. 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 コマンドの提供 指定したクラスの依存関係を取得可能
  125. 125. 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 パッケージを明示
  126. 126. 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 プロジェクトへの参加が容易
  127. 127. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.127 JDK 開発者の為の機能 JDK の開発者がマルチ・コア環境でJDK の Java クラスファイルをコンパ イルする際、マルチコアを利用してインクリメンタル・ビルドができるよう に javac のラッパーライブラリを作成 ! 現在は、一般向けの提供は無く JDK のビルドにのみ提供! JDK(Nashorn含む)のビルドに利用! ! JEP 139 : JDK ビルド・スピードの改善      JDK 開発者用マルチコア対応 javac ライブラリ
  128. 128. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.128 Language Core Libraries Internationalisation Security Platform Virtual machine
  129. 129. 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 領域の削除
  130. 130. 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 の組み合わせを排除
  131. 131. 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 : メソッド・ハンドルの実装改善
  132. 132. 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 の詳細を出力
  133. 133. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.133 組み込み向けJava VM で使用してきたメモリ使用量削減技術を Java SE の HotSpot に適用 •  あまり使われないフィールドをクラス、メソッド等の外部に保存 •  可能な限り小さい構造体フィールドを全て作る •  特定のフィールドをより小さい型におさめるためにエンコード JEP 147 : クラス Metadata のメモリ使用量削減
  134. 134. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.134 その他 : Java Mission Control 5.3 高機能な JavaVM 解析ツール •  パフォーマンス解析 •  ヒープ解析 •  レイテンシ解析 稼働中システムに低影響で  監視・管理が可能 詳細なデータ分析も可能
  135. 135. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.135

×