More Related Content
Similar to Java Day Tokyo 2014 まとめ (chen)
Similar to Java Day Tokyo 2014 まとめ (chen) (20)
More from Appresso Engineering Team
More from Appresso Engineering Team (17)
Java Day Tokyo 2014 まとめ (chen)
- 2. 参加セッション
• [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
- 3. 基調講演(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
- 4. 基調講演(2)
• Java SE 8 日本語ドキュメント公開!
• Java SE/MEの事例紹介
– [NEC] PaPeRo petit (ロボット)
• クラウド:サービス連携、高度処理
• デバイス:高度センシング、インストラクション基礎
– [Panasonic] 電子マネー決済端末
• Java SE/ME Roadmap
– JDK 9: 2016
- 5. 基調講演(3)
• Java EE 8 の計画説明
• Java Embedded デモ
– Lego Mindstorms (で作られたDuke)
– Duke Pad + Chess Robot
• Java とコミュニティ活動
– JJUG (Japan Java User Group)
• CCC
• ナイトセミナー
- 6. Java SE 8 概要 (1)
• 変更点
– 言語仕様、クラスライブラリ、プラットフォームなど
– 新しいフィーチャ 65 項目
• 新機能
– Annotation on Java Types (JSR 308)
– Date and Time API (JSR 310)
– Lambda Expressions (JSR 335)
- 7. Java SE 8 概要 (2)
• JEP (JDK Enhancement- Proposal)
– 改善提案はどの部分に対しても可能
– コアに影響がある場合、Java SE への反映は検討される
※ JDK の一部機能実装は言語仕様範囲外
• Lambda Expression
– 動作(behavior)をパラメータとして渡す
– Syntactic sugar?そうではない…(詳しくは後で)
- 8. 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ではコンパイルエラー
- 9. Java SE 8 概要 (4)
• リフレクション
– メソッドパラメタが取得可能
• 並行性機能追加
– Scalable update variable: 頻度 write > read の場合に使用
• DoubleAccumulator, DoubleAdder, …
– ForkJoinPool
• 集合データ処理 (bulk data operation)
– Filter, map, reduce のパイプライン処理
- 10. Java SE 8 における HotSpot の進化 (1)
• PermGen が廃止され、Metaspace が導入された
• Metaspace はヒープ以外の場所を使用
• Metaspace に変わってうれしいこと
– デフォルトではサイズ制限がない
– GC システムが管理する必要がない
• GCのパフォーマンスがよくなる
– アンロードは ClassLoader の単位で行う
• 断片化発生しにくい
- 11. Java SE 8 における HotSpot の進化 (2)
• OOP(ordinary object pointer)の圧縮参照の話
– 64-bitのマシンで、アドレスを32-bitに格納
• Javaヒープ使用量節約
• Klassポインタも圧縮
– 圧縮アドレスのメモリエリアを用意
• パフォーマンスに影響を及ぼすものだけ格納
• アドレス参照のパフォーマンス向上
- 12. Java SE 8 における HotSpot の進化 (3)
• Tiered Compilation
– JDK 8 でデフォルトで有効
– 実装が従来より充実
• いろいろパフォーマンス改善
– 頑張った結果 JDK 7より約 1.5 倍はやくなった
- 13. Exploring JavaFX 8
• Swing との連携
– JFXPanel と SwingNode 使用
• JavaFX に関する変更
– Java 8 から classpath に含まれるようになった
• JavaFXアプリのパッケージングの説明
– applets, web start, native packaging
• JavaFX Scene Builder 2.0 のデモ
- 15. Java Day Tech Night: Ask the Experts
• Lambda 式と匿名クラスとの違い
– 最初のプロトタイプの実装は同じだったけど、JDK 8今は違う
– 実行時の初回呼び出し時に invokedynamic バイトコードを生成
– それ以降の呼び出しは生成済みのコードを呼び出し
– 詳しい話は Java One 2013の “ Lambda under the hood” を参考
- 16. Java Day Tech Night: Ask the Experts
• Lambda式内のチェック例外の扱い
– Stream API内の呼び出しタイミングが不定で、処理が難しい
– チェック例外を扱うFunctional インタフェースを自作すれば?
• Exception Transparency というテクニーク
• 複数例外クラスを投げる場合は対応できない
• すべての例外を投げるインタフェースとクラスに対応が必要
– 将来のリリースで改善したい
- 17. Java Day Tech Night: Ask the Experts
• Stream APIマルチスレッド実行時の例外処理について
– Stream APIのマルチスレッド実行はFork/Joinで実装されて
– 例外はForkフレームワークにキャッチされ、情報は保存される
– 処理が終わったら、保存された例外情報を元に、リトライすればよい
– でもおすすめはラッパ処理を作って、中で例外をキャッチ
- 18. Java Day Tech Night: Ask the Experts
• Default Methods 導入されたが、将来は多重継承をお考え?
– Default Methods のいい点としては拡張時の後方互換性
– デフォルトフィールドみたいな多重継承フィーチャの考えはない
– フィールドがほしいなら抽象クラス使えばよい