18
Java Day Tokyo 2014 ササササ サササ 2014/05/26

Java Day Tokyo 2014 まとめ (chen)

Embed Size (px)

Citation preview

Page 1: Java Day Tokyo 2014 まとめ (chen)

Java Day Tokyo 2014サマリー

陳映融2014/05/26

Page 2: Java Day Tokyo 2014 まとめ (chen)

参加セッション

• [K-1] 基調講演• [A-1] Java SE 8 概要• [C-2] Java SE 8 における HotSpot の進化• [A-3] Exploring JavaFX 8• [A-4] Lambda 式とストリーム API 、並列処理の

詳細• [A-5] Java Day Tech Night

Page 3: Java Day Tokyo 2014 まとめ (chen)

基調講演 (1)

• Java の 3 本柱における進展– Community: OpenJDK, JCP, …– Technology: Java SE 8, Java FX, Java ME 8, Java EE 7– Stewardship: Java magazine, JUGs, …

• Java SE 8 について– Nashorn– More and more parallelism support

• (future) Project Sumatra: GPU offload

– Main features

Page 4: Java Day Tokyo 2014 まとめ (chen)

基調講演 (2)

• Java SE 8 日本語ドキュメント公開!• Java SE/ME の事例紹介– [NEC] PaPeRo petit ( ロボット )

• クラウド:サービス連携、高度処理• デバイス:高度センシング、インストラクション基礎

– [Panasonic] 電子マネー決済端末• Java SE/ME Roadmap– JDK 9: 2016

Page 5: Java Day Tokyo 2014 まとめ (chen)

基調講演 (3)

• Java EE 8 の計画説明• Java Embedded デモ– Lego Mindstorms ( で作られた Duke)– Duke Pad + Chess Robot

• Java とコミュニティ活動– JJUG (Japan Java User Group)

• CCC• ナイトセミナー

Page 6: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 概要 (1)

• 変更点– 言語仕様、クラスライブラリ、プラットフォームなど– 新しいフィーチャ 65 項目

• 新機能– Annotation on Java Types (JSR 308)– Date and Time API (JSR 310)– Lambda Expressions (JSR 335)

Page 7: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 概要 (2)

• JEP (JDK Enhancement- Proposal)– 改善提案はどの部分に対しても可能– コアに影響がある場合、 Java SE への反映は検討され

る ※ JDK の一部機能実装は言語仕様範囲外

• Lambda Expression– 動作 (behavior) をパラメータとして渡す– Syntactic sugar ?そうではない… ( 詳しくは後で )

Page 8: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 概要 (3)

• Default Methods– 後方互換性を保ちつつ既存のインタフェースを拡張– Mixin みたいな仕組みとしては意図していないらしい

• Annotation on Java Types– @notnull parameter のコンパイル時チェック

• ジェネリックスの改善 Map<String, List<String>> map = new HashMap<>(); map.put(“key", new ArrayList<>()); // Java 7ではコンパイルエラー

Page 9: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 概要 (4)

• リフレクション– メソッドパラメタが取得可能

• 並行性機能追加– Scalable update variable: 頻度 write > read の場合に使

用• DoubleAccumulator, DoubleAdder, …

– ForkJoinPool

• 集合データ処理 (bulk data operation)– Filter, map, reduce のパイプライン処理

Page 10: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 における HotSpot の進化 (1)

• PermGen が廃止され、 Metaspace が導入された• Metaspace はヒープ以外の場所を使用• Metaspace に変わってうれしいこと– デフォルトではサイズ制限がない– GC システムが管理する必要がない

• GC のパフォーマンスがよくなる– アンロードは ClassLoader の単位で行う

• 断片化発生しにくい

Page 11: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 における HotSpot の進化 (2)

• OOP(ordinary object pointer) の圧縮参照の話– 64-bit のマシンで、アドレスを 32-bit に格納

• Java ヒープ使用量節約• Klass ポインタも圧縮– 圧縮アドレスのメモリエリアを用意

• パフォーマンスに影響を及ぼすものだけ格納• アドレス参照のパフォーマンス向上

Page 12: Java Day Tokyo 2014 まとめ (chen)

Java SE 8 における HotSpot の進化 (3)

• Tiered Compilation– JDK 8 でデフォルトで有効– 実装が従来より充実

• いろいろパフォーマンス改善– 頑張った結果 JDK 7 より約 1.5 倍はやくなった

Page 13: Java Day Tokyo 2014 まとめ (chen)

Exploring JavaFX 8

• Swing との連携– JFXPanel と SwingNode 使用

• JavaFX に関する変更– Java 8 から classpath に含まれるようになった

• JavaFX アプリのパッケージングの説明– applets, web start, native packaging

• JavaFX Scene Builder 2.0 のデモ

Page 14: Java Day Tokyo 2014 まとめ (chen)

Lambda 式とストリーム API 、並列処理の詳細

• ソースコードを使った説明– Functional インタフェース– パイプライン処理の作り方– 並列処理の実装例

Page 15: Java Day Tokyo 2014 まとめ (chen)

Java Day Tech Night: Ask the Experts

• Lambda 式と匿名クラスとの違い– 最初のプロトタイプの実装は同じだったけど、 JDK 8 今は違う– 実行時の初回呼び出し時に invokedynamic バイトコードを生成– それ以降の呼び出しは生成済みのコードを呼び出し– 詳しい話は Java One 2013 の “ Lambda under the hood” を参考

Page 16: Java Day Tokyo 2014 まとめ (chen)

Java Day Tech Night: Ask the Experts

• Lambda 式内のチェック例外の扱い– Stream API内の呼び出しタイミングが不定で、処理が難しい– チェック例外を扱う Functional インタフェースを自作すれば?

• Exception Transparency というテクニーク• 複数例外クラスを投げる場合は対応できない• すべての例外を投げるインタフェースとクラスに対応が必要

– 将来のリリースで改善したい

Page 17: Java Day Tokyo 2014 まとめ (chen)

Java Day Tech Night: Ask the Experts

• Stream API マルチスレッド実行時の例外処理について– Stream API のマルチスレッド実行は Fork/Join で実装されて– 例外は Fork フレームワークにキャッチされ、情報は保存される– 処理が終わったら、保存された例外情報を元に、リトライすればよい

– でもおすすめはラッパ処理を作って、中で例外をキャッチ

Page 18: Java Day Tokyo 2014 まとめ (chen)

Java Day Tech Night: Ask the Experts

• Default Methods 導入されたが、将来は多重継承をお考え?– Default Methods のいい点としては拡張時の後方互換性– デフォルトフィールドみたいな多重継承フィーチャの考えはな

い– フィールドがほしいなら抽象クラス使えばよい