JavaOne 2014 SF Sessions Note¶
- 目次
- JavaOne 2014 SF Sessions Note
JavaOne 2014の各セッション(聴講していないものを含む)の資料を見てメモを作成。
Streams APIとParallel¶
並列¶
逐次 v.s. 並列¶
CON3372 セッションスライドp.35より、いつ並列化すべきか?- 並列化は開始時にオーバーヘッドが発生(おおよそ100μ秒)するので、これより計算時間が短いなら逐次でよい
N × Q >= 10,000
なら並列化を考慮する- Nは要素数
- Qは各要素の処理コスト、整数加算を1とする
- 例)3次元空間(デカルト座標系)の距離計算は7、この距離計算から平方根計算を除いたら3.3
- 要素毎の処理が独立で、入力データが効率よく分割可能である
並列数¶
TUT3472 セッションスライドp.198より、コア数の指定
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", 2);
性能¶
JMHによる性能計測¶
言及しているセッション- CON3372(p.36)
JavaVMと性能¶
IntelプロセッサとJavaVMの性能¶
BOF3002 より
- AVX/AVX2を使ったJVM/JIT最適化(SIMD演算を使った最適化)
- System.arraycopy, Arrays.fill, Arrays.equals, String.compareTo, String.equals, String.indexof
- ISO 8859符号化(例:AVX2なら32文字同時処理)
- TSX(トランザクショナルメモリ)を使った最適化
- synchronizedメソッド、synchronized文に適用、-XX:+UseRTMLockingで有効化
- java.util.zipのCRC32チェックサム生成
- AES-NI命令による暗号化最適化
JVMバージョンと最適化機能
- JDK 8 G/A: AES-IN, AVX/AVX2, CRC32
- JDK 8u20: TSX, Bit Manipulation
- JDK 8u40: Atom, BigIntegerの乗算, PKCS11
- JDK 9以降: AVX-512, 数学ライブラリ、TSXプリミティブ、暗号化最適化の改善
レイテンシー削減¶
CON1873 Toward Low-Latency Java Application¶
メモリ上で各種データをバイナリ形式で保持しメモリフットプリント削減、シリアライズ時間短縮。SDOというツール(ライブラリ?)
CON1833 Turn Your XML into Binary: Make It Smaller and Faster¶
性能を考慮したプログラミング¶
CON2139 Performance and Predictability¶
- CPUの仕事は4つ:フェッチ、デコード、実行、書き戻し、これらはパイプライン・スーパースケーラ化
- コードの分岐(if文などによる)はストールを起こし、性能劣化させる
- メモリアクセスはキャッシュを活かす
- 配列はリニア(順次)にアクセス、飛び飛びにはアクセスしない。
- 多次元配列はJavaでは配列の配列
- プリミティブ・コレクション(GNU Trove、GS-Coll、FastUtil、HPPC)、リンクリストより配列、・・・
- Javaのヒープレイアウトは弱点(散らばる)
Java Flight Recorder¶
CON10912 Using Oracle Java Flight Recorder¶
CON2262 Be in control of your JavaFX mission¶
プログラミング¶
アノテーション¶
型アノテーションを使ってコード品質を高める¶
BOF4499
- nullでない参照:
@NonNull Data mydata;
- インターン済み文字列:
@Interned String query;
- nullでない英語文字列のリスト:
@NonNull List<@English String> msga;
- 英語文字列の空でない読み込み専用配列:
@English String @ReadOnly [] @NonEmpty [] a;
- @NonNull指定の引数にnullを渡すと警告
- @Nullable指定の引数をnullチェックせずに使用すると警告
アノテーションプロセッサー¶
CON2013
アノテーションプロセッサの解説、実行方法、ソースコードの生成、バイトコード操作(Lombokを例に)
ラムダ式¶
CON3248¶
- ラムダ式と内部クラスの違い
TUT3472¶
- ラムダ導入
Java仕様¶
Java SE仕様¶
標準APIの数の変遷¶
CON6377
Java SEのバージョンと標準API数
バージョン | リリース日 | API数 |
---|---|---|
1.0 | 1996-01-23 | 2215 |
1.1 | 1997-02-19 | 5859 |
1.2 | 1998-12-08 | 22595 |
1.3 | 2000-05-08 | 25967 |
1.4 | 2002-02-06 | 34510 |
5 | 2004-09-30 | 40289 |
6 | 2006-12-11 | 45263 |
7 | 2011-07-28 | 48215 |
8 | 2014-03-18 | 51980 |
リアルタイム仕様¶
JSR 282 新しいリアルタイムJava仕様¶
BOF4957
- 現行リアルタイムJava仕様の改訂
- リアルタイムなGC
- 速いCPU
- Java 1.4ベースから1.8ベースへ
- Android
- 多様なリアルタイム性への対応
- I/OアクセスにJNIを不要に
- RawMemory、アクセス型毎のインタフェース RawInt, RawShort, RawByte, RawFloat, ...
- メモリマップI/O、I/OマップI/O、DMA
- イベント関連の再設計
- ユーザー定義Clock
- Affinity
- ScopedMemoryに新たな種類(PinnedMemory、StackedMemory)
ユーザーインタフェース¶
入力操作¶
マウスに替わる入力デバイス¶
CON1726
Leap Motion 他
アイトラッキング(視線追跡)¶
CON1753
データ可視化¶
3D可視化事例¶
CON1993
- ニューラルネットワークの可視化
- NetBeans Platform上でニューラルネットワークの作成・解析を行うツール「Neuroph Studio」開発
- ニューラルネットワークを扱う基盤ライブラリneuroph
http://neuroph.sourceforge.net/
- NASAミッションの可視化
- JavaFX 3Dパッケージだけでは不足(3次元軌道などの可視化)
- F(X)yzを使用
- ルービックキューブ
- LEAP MOTION V2
- 建築モデル
CON1994
- NASAミッション可視化の事例詳細
データ可視化ライブラリ情報¶
- JFreeChart
2D Line, Histgram, Scatter - Jzy3d
3D Histgram, 3D Surface, 3D Scatter - JMonkeyEngine
3D Real Time histgram, Histgram, 3D Real Time Scatter - Java FX FXyz
3D Histgram, 3D Scatter, Billboards, Skybox, Polyline3D, Camera Control
JavaFX¶
ControlsFX¶
CON2079
- ControlsFX利用者
- NASA Magnetospheric Multiscale Mission Support Software
- PIP: オープンソース医療画像解析ツール
- Alt.Text
- ESPLab
- 機能
- ダイアログ → JavaFX 8u40に取り込まれる予定(APIには手が入る模様)
- ウィザード
- プロパティシート(JavaBeans対応)、エディタ付き、単純なフォームにも使える
- Action API
- Decoration/Validation API
- Gryph Font API
- Notification API(通知用領域、通知用ウィンドウ)
- Spreadsheet View
- CheckComboBox, CheckListView, CheckTreeView
- PopOver
- TextField API 自動補完、消去、Decorated
- Range Slider 最小・最大の2つのドラッグポイントがある
- その他のコントロール(Border API, BreadCrumbBar, GridView, HiddenSidesPane, HyperlinkLabel, InfoOverlay, MasterDetailPane, PlusMinusSlider, Rating, SegmentedButton, SnapshotView)
Enterprise JavaFX(いろいろなフレームワーク)¶
CON2341
クライアント/サーバーでのJavaFXの課題と解決- バックグラウンドでのデータ取得と表示更新での例外(エラー処理)はスパゲッティコード
- DataFX 8のProcessChain、リアクティブ・プログラミング
- Netflix Hystrixのタイムアウト処理
- クライアント側の構造
- MVVMアーキテクチャとそれを実現するフレームワーク
- Ankor.io
- MVVMFX
- PMVC
- OpenDolphin
- PresentationModel
- MVVMアーキテクチャとそれを実現するフレームワーク
- 複数のクライアント
- DataFX
- Afterburner.fx
- JacpFX
- これらは、JavaFXのアプリケーションフレームワーク、Java EE(REST, WebSockets, RemoteEJB対応)、MVC、ワークフロー、CDIなどを持つ
- 業務向けのコントロール
- ControlsFX
- FlexGanttFX
- その他
- OAUTH
- GUIGarage
事例¶
NATO セキュリティシステムから学んだこと¶
CON6735
NATOのCIS(Communication and Information Systems)は、- セキュリティ
- ライフサイクル全体に渡ってセキュリティの確保
- 情報保証の基本原則(秘匿性、保全性、可用性、利用者/情報の真正性、サービス/データの説明可能性)
- 早い段階でセキュリティ要求を定義すればコストが低減できる
- セキュアな開発とコードレビュー:「The CERT Oracle Secure Coding Standard for Java」
https://www.securecoding.cert.org/confluence/display/java/The+CERT+Oracle+Coding+Standard+for+Java
- オープンソースソフトウェアの使用
- 信頼されたオープンソースソフトウェアサイトからのみダウンロード
- ソースの検疫(一定期間)
- ソースからビルドして使用(ビルド済みバイナリを信用しない、JREですら)
- テスト
- 多段階テスト(ユニット・コンポーネント、統合、システム、受け入れ)
- テスト種類(機能:black-box、非機能:Load/Volume/Stress, 移植性, 使用性)
- ベータテストと初期ユーザーからのフィードバック
- 内部テストでは運用経験を持つ有資格テスター、オンサイトテストは運用者自身
- テスターが準備したテストデータ(同値分類、境界解析、状態遷移などの技術を用いて)
- 運用データ(レコーディング、生データ)
- データ融合(データベースレベル、リアルタイム)
- リスク低減
- プロジェクトリスク、セキュリティリスク、運用リスク
- 安全性
- 欠陥検出にはassertionの使用
- 誤り検出とコード修正(誤りのログと通知)
- システム能力低下の可視化(遅延、CPU負荷、など)
- ソフトエアモジュールサイズと複雑さの制御(コーディング標準、CheckStyle)
- 情報隠蔽/カプセル化(NetBeans Modules API)
- 動的再構成(再起動せずに設定の変更反映)
- 信頼・検証されたソフトウェア要素(DO-330、他)
- 完全なトレーサビリティ(仕様-設計-コード-テスト手順-テスト結果、例:SCRUMのストーリーとコードの対照)
- 静的コード解析(コーディング標準、CheckStyle、PMD、FindBugs)