SlideShare ist ein Scribd-Unternehmen logo
1 von 18
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 のいい点としては拡張時の後方互換性
– デフォルトフィールドみたいな多重継承フィーチャの考えはない
– フィールドがほしいなら抽象クラス使えばよい

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (17)

SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQLMySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
 
ゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバーゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバー
 
mod_cluster
mod_clustermod_cluster
mod_cluster
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
 
hscj2019_ishizaki_public
hscj2019_ishizaki_publichscj2019_ishizaki_public
hscj2019_ishizaki_public
 
MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
 
松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入
 
MySQL カジュアル 福岡 03
MySQL カジュアル 福岡 03MySQL カジュアル 福岡 03
MySQL カジュアル 福岡 03
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪
 
シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
 
ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編
 

Andere mochten auch

Andere mochten auch (13)

Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59
 
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70
 
Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75
 
Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48
 
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加
 
Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62
 
Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目49-52Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目49-52
 
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65
 
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78
 
Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56
 
マルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Executionマルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Execution
 
20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)
 
JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値
 

Ähnlich wie Java Day Tokyo 2014 まとめ (chen)

What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
TakumiIINO
 
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
Toshiaki Maki
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06
ohtsuchi
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
YusukeKuramata
 

Ähnlich wie Java Day Tokyo 2014 まとめ (chen) (20)

Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだScalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
 
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 

Mehr von Appresso Engineering Team

Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44
Appresso Engineering Team
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42
Appresso Engineering Team
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40
Appresso Engineering Team
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37
Appresso Engineering Team
 
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34
Appresso Engineering Team
 
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31
Appresso Engineering Team
 
Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第5章 項目26-29Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第5章 項目26-29
Appresso Engineering Team
 
Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目23-25Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目23-25
Appresso Engineering Team
 
Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第4章 項目18-22Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第4章 項目18-22
Appresso Engineering Team
 
Effective Java 輪読会 第4章 項目13-17
Effective Java 輪読会 第4章 項目13-17Effective Java 輪読会 第4章 項目13-17
Effective Java 輪読会 第4章 項目13-17
Appresso Engineering Team
 
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7
Appresso Engineering Team
 
Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目1,2,3,4Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目1,2,3,4
Appresso Engineering Team
 

Mehr von Appresso Engineering Team (17)

JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
 
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68
 
Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73
 
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37
 
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34
 
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31
 
Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第5章 項目26-29Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第5章 項目26-29
 
Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目23-25Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目23-25
 
Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第4章 項目18-22Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第4章 項目18-22
 
Effective Java 輪読会 第4章 項目13-17
Effective Java 輪読会 第4章 項目13-17Effective Java 輪読会 第4章 項目13-17
Effective Java 輪読会 第4章 項目13-17
 
Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目11, 12Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目11, 12
 
Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目8,9,10Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目8,9,10
 
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7
 
Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目1,2,3,4Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目1,2,3,4
 

Java Day Tokyo 2014 まとめ (chen)

  • 1. Java Day Tokyo 2014 サマリー 陳映融 2014/05/26
  • 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 のデモ
  • 14. Lambda 式とストリーム API、 並列処理の詳細 • ソースコードを使った説明 – Functional インタフェース – パイプライン処理の作り方 – 並列処理の実装例
  • 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 のいい点としては拡張時の後方互換性 – デフォルトフィールドみたいな多重継承フィーチャの考えはない – フィールドがほしいなら抽象クラス使えばよい