torutkのブログ

ソフトウェア・エンジニアのブログ

JavaOne Tokyo 2012の2日目

JavaOne Tokyo 2012の1日目 - torutkの日記の続きです。

本日聴講セッションは次です。

  • Project Jigsaw: Putting it all Together
  • How to Write Low Latency Java Applicaitions
  • Interface Layout with JavaFX 2.0
  • SunSPOT,Ardruinoをつかったガイガーカウンターバイスの作成について
  • Learn how the JVM is fundamental to our architecture
  • JavaOne Community Panel Discussion

Project Jigsaw: Putting it all Together

Java SE 8に向けたモジュール管理機構"Java Standard Module System(JSR未発行)"のベースとなるProject Jigsawの説明です。

従来のJARだけではいわゆる「JAR地獄」、組み込み等のフットプリント削減、ダウンロード・起動時間の増大といった問題が生じてきたので、グループ化/依存関係/バージョン制御/カプセル化/オプション/エイリアスなどの近代的なパッケージ管理に必要な機能を載せようというものです。

module-info.javaというファイルに、moduleキーワードを使ってモジュール名とモジュールに含めるクラス、依存関係、バージョン番号などを定義します。定義したモジュールは、拡張子.jmodのファイル(Javaモジュールファイル)として生成されます。

module com.foo { }

プログラムを実行するときはJARではなくモジュールを指定します。モジュールは所定の場所にインストールしたりネットワーク上にリポジトリを設けて配置したりといった管理機能が用意されます。

過去、そこそこ大きいライブラリを作成しアプリケーションへ提供するとき、ライブラリを複数パッケージで構成した場合、ライブラリ内では使えるがアプリケーションへは見せたくないクラスがあると、現状では制限ができませんが、Jigsawによって利用を許可するパッケージを指定できるようになるので便利です。

バージョンについては、現在はJARのマニフェストに記載できなくもないですが、手間がかかるしバージョンをチェックするのはアプリ側の責務となってしまいます。

Jigsawについては、Linuxのパッケージ管理機構(rpm, debなど)にあるような機能をJavaのモジュールに導入します。素材は提供されたので、あとはどう料理するかを研究するのが今後でしょう。

How to Write Low Latency Java Applicaitions

GCJITによる遅延(Latency)を避けるには、というセッションです。
GCによる遅延に影響するのが、マイナーGC発生頻度、旧世代への昇格頻度などです。世代別GCでは新規オブジェクトの割り当てより、残り続けるオブジェクトが遅延に影響します。

GCについては、遅延の観点での理想は、ParallelGCを使い、フルGCを発生させないことです。
もし、旧世代のフルGCが必要となったらCMSを試すとよいそうです。CMSには、若い世代から旧世代への昇格がフリーリストのインサート処理になるため遅くなるという問題もあります。また、並列コレクタにはライトバリアが必要なためオーバーヘッドが生じます。

GCの遅延を少なくするプログラミングとしては

  • 大きなオブジェクトを避ける
  • コンテナクラスが内部に持つ配列のリサイズを避ける
  • オブジェクトプールを避ける
  • finalizeは絶対に使うな、代わりにリソースを明示的に開放するメソッドを設ける

などです。

JITについては、プログラミング上意識して最適化はするな、ということです。

また全体に最適化はまずプロファイルをしてから。

ツールの紹介をいろいろしていましたが、メモを仕切れませんでした。

Interface Layout with JavaFX 2.0

早口で英語についていけず同時通訳を利用しました。
JavaFX 2.0でのレイアウト部品の紹介と、リサイズの方法が説明されてました。

講師の方は、説明はさっさと終えてQ&Aをたっぷりとる方針でしたが、実際にプログラミングしてみないと質問も難しいので、スライド追加説明となりました。

レイアウトで説明のあったクラス。
Pane,AnchorPane,BorderPane,StackPane,HBox,VBox,TilePane,FlowPane,GridPane

RegionクラスはCSSでボーダーやマージンを制御することもできるようです。

SunSPOT,Ardruinoをつかったガイガーカウンターバイスの作成について

SunSPOTはOracleになってからも購入可能で値段も下がったとのことです。
MacOSで使うのが推奨とのことです。

放射線計測器をSunSPOTにつなぎ、計測したデータを無線で飛ばして集計してマップを作成するということができればいいね、というストーリーで以降のプレゼンが進みます。

ここから少しJavaとは離れますが、放射線の種類と計測方式(ガイガー、半導体、シンチレーション)の説明と、ガイガーカウンタの作成のデモがありました。計測の原理については初めて知りました。

デモでは、ガイガー管が必要とする400Vに昇圧するために「写るんです」のフラッシュ回路を使いました(ばらすときに火花がちってましたが、爆発ではありません)。

SunSPOT(またはArdruino)とガイガーカウンタを太陽電池駆動し、これをSunSPOTの近距離無線範囲になる間隔で配置すれば、応用ができるのでは、というところで今回は終わりました。

Learn how the JVM is fundamental to our architecture

TwitterのエンジニアによるTwitterインフラのアーキテクチャ解説です。

Twitterはリアルタイム/ニアリアルタイムなサーバーで、トラフィックは瞬時に飛びぬけて増加するという特徴があります。昨年の震災(2011/3/11)では1日に3億4千万ツイートが全世界であったそうです。

FinagleというJavaの非同期RPCライブラリを使っています。

Twitterアーキテクチャについては非常に詳細な解説がありました。

JavaOne Community Panel Discussion

4つのコミュニティ(JGGUGJRubyScala、関ジャバ)から代表4人が登壇してOracleの伊藤さん司会のもとディスカッションしていました。

JGGUGがアウトプット指向で、電子雑誌を出しているとの話を聞いて、我らがJava読書会も何かアウトプットできないかとちょっと刺激を受けました。

JavaOne Tokyo 2012 セッション資料公開

Oracle OTNサイトからセッション資料が公開されました(2012/04/10追記)

JavaOne Tokyo 2012のブログを集めてみた

キーノートセッションだけの記事、メディア系の記事はリストアップから外しています。
(2012/04/15 リンク追加)