プロジェクト

全般

プロフィール

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;

Checker Framework

  • @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
  • 複数のクライアント
    • 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)


ほぼ9年前に更新