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