Weitere ähnliche Inhalte
Ähnlich wie Java Day Tokyo 2014 まとめ (chen) (20)
Mehr von 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 のいい点としては拡張時の後方互換性
– デフォルトフィールドみたいな多重継承フィーチャの考えはない
– フィールドがほしいなら抽象クラス使えばよい