0日目
1日目

はい、最終日の2日目です

2日目は、Keynoteはスルー(というか、起きたら9時だった)
「昨日のKeynoteは(後半)アレだったんでま、いっか」ってことでゆっくり出発

会場に着いたのは10時くらい
昨日受付を済ませているので、そのままカフェブースに直行してKeynoteのTLを見ながら1日目のブログを書き書き


例によってTwitterにメモったことから箇条書き

■JavaFX Architecture and Programming Model(11:45〜
  • 会場に入ると「本日はOracle Open World Tokyo 2012にご来場いただきまして、誠にありがとうございます」というアナウンスが!それは隣だwww
  • JavaFXは各レイヤーを分けてあるから、いろんなプラットフォームに対応できる
  • JavaFX on iOSとJavaFX on AndroidをiPadとタブレットでデモ
  • Android版はDalvik上で動かしてて性能はかなりいい
  • JavaFX on iOSのライブコーディング!(ここが最高潮)
  • 後半はJavaFXのコードの書き方とかのお話
  • Androidとかと同じでSceneの操作はUIスレッド(JavaFXの場合はApplication Thread)から行う
  • Viewの作成とかはApplication Threadじゃなくてもできるけど、Attachした後はApplication Threadから行わないといけない
■お昼(各Expert?に質問コーナー
 (結局昼飯優先)
 (#てらだよしおがんばった)


13:15〜のセッションは休憩時間に当てて、Visage(JavaFX on Androidらしい)を眺めたり
※2012/04/06 追記 どうも、上記のVisageはJavaFX on Androidではなくて、AndroidやJavaFX2.0のUIをJavaFX Scriptの記法で書けるってだけのツールみたいでした...


■How to Write Low Latency Java Applications(14:30〜
  • かなり荒ぶった
  • 要約:GC FriendlyでJIT Friendlyなコードを書きましょう
  • Javaで使うメモリは細分化されてる(allocateされてすぐのオブジェクトが入る領域とか、生きてるオブジェクトが入る領域とか、古くなったオブジェクトが入る領域とか)
  • GCにも種類があって、若いオブジェクトに対するGCは割りと軽い
  • GCの軽さにはオブジェクトのGraph(階層構造のこと)の複雑さも影響する(参照をたどる必要があるため)
  • 軽いGCはそこまでパフォーマンスに影響を及ぼさないので、小さくて生存期間の短いオブジェクトを作るのは問題ない
  • GCs love small immutable objects and short-lived objects
  • とは言え、当然、不必要なオブジェクトをallocateするのはやめましょう
  • オブジェクトをコンパクションするようなGCはStop the world Collectorと呼ばれてて、アプリケーションの全スレッドを止める
  • 並列GCとか使うようにオプション設定して、Full GCが入る前にこまめにGCするといいらしい
  • 大きいオブジェクトはなるべく使わないように
  • 大きいオブジェクトは軽いGCで済むメモリ領域に入らない場合がある
  • allocateにもコストがかかるし、Javaはallocateした時にzeroでinitializeするのでここにもコストがかかる
  • あと、大きいオブジェクトを何個も作るとメモリの断片化が発生してしまう
  • 大きいオブジェクトになったときはクラス設計を見なおせ
  • データ構造のリサイズにも気をつける
  • ArrayListとかでサイズの初期値を決めずにAddしていくと、初期サイズを超えた時のリサイズにコストがかかるから、new する時にサイズを決めてやると効果的
  • Finalizeは絶対に使うな!
  • Finalizeがあると、GCが走る→Finalizeが定義されてるオブジェクトを発見する→そのオブジェクトのFinalizeが終わった後にもう一度GC走らせるキューができる
  • つまり、Finalizeがあると、そのオブジェクトをGCするために2サイクルのGCが必要
  • Finalizeが定義されてるクラスをextendsするよりは、クラスのメンバとしてFinalizeが定義されてるクラスのインスタンスを持つようにするといい(そのクラスのサイズによる?)
  • SoftReferenceとかも影響でかいことがあるから使う時は注意する
  • innerクラスは暗黙的にouterクラスへの参照を持つのでこれも注意(オブジェクトのGraph関連)
  • JITコンパイラはその時点では最適ではないかもしれないけど、実は最適ではなかった!ということがある
  • inline メソッドにするとうんたらかんたら
  • Virtualizeなメソッドがある場合、その実装が1つであればコストは無視出来る程度に低いけど、実装が複数あるとコストが高くなってくる
  • 下手な最適化は意味ない?
  • パフォーマンス上げるにはProfileが重要

■Interface Layout with JavaFX 2.0(15:45〜
  • ちょい難しい上にペース早くてついていけない...
  • 11:45〜のセッションと同じ部屋だったけど、やっぱりOracle Open World Tokyo 2012なのね...
  • 今回何度も聞いたScene Graph
  • JavaFXでもCSSが使えて、CSSがレイアウトにインパクトを与える
  • 各コントロールにはResize可能なものと、Resizeできないものがある
  • Resizeできないものはする必要がないものがほとんどだけど、ImageViewもResizeできない。これは要望が多いので対応を考えている(後の質問コーナーでわかったのですが、Resizeってのは親のコントロールにアンカーを置いて、親のサイズに合わせて自動でResizeするってことらしいです。例:ウィンドウサイズを変えたら中のTextViewのサイズも変わるとか)
  • なんかJavaFXのレイアウト関連で新しいToolが近いうちに公開される?(Speakerによると「これは素晴らしいツールだ」とのこと
  • おや?時間が余ったぞ?こんなこともあろうかと、ちゃんとアンコール用の資料がありますよ!(結局アンコールの後でも時間が余った... )

で、この2つのセッションで疲れ果てて、17:00〜のセッションは休憩

■Learn how the JVM is fundamental to our architecture.(18:15〜
  • Twitter社の内部技術?をかなり詳しく説明されてた
  • 事件・災害・イベント等があると10k/secを越えるTweet数がある
  • ちなみに #バルス はそれを遥かに上回った。日本人自重しろ(とまでは言ってない
  • Java OneだっつってんのにサンプルコードはScala
  • とりあえず、http://twitter.github.comをチェケラッチョしてね☆

■コミュニティ主催者のパネルディスカッション(19:30〜
  • 今日はビールとかデュークおむすびとかなかった... #残念
  • Java OneだっつってんのにScala vs Groovy vs JRuby の第2ラウンド
  • 初学者でもScalaのMLに気兼ねなく質問してね(マサカリが飛んでくるから)
  • 各コミュニティで考え方とか方針は違うけど、根っこの部分(人を育てるってところ)は同じだと感じた

これでJava One Tokyoの全セッションは終了
その後、JJUG主催のNight Partyに移動
受付がすごい行列(人数が人数だとは言ってもゲフンゲフン
#てらだよしお愛されてる


簡単に総括(という名の感じたこととか学んだ教訓とか)
  • このレベルのイベントに参加するのはすごいいい経験になる
  • あれもこれもって欲張らずに、テーマを決めて(今回の私の場合はJavaFX)それを中心に追いかけるとすごい勉強になるような気がする
  • 2日間で延24時間くらい会場にいる計算になるので、休めるときに休憩をしっかり取る
Java Oneに参加して、とてもためになり、これからのモチベーションも上がった(ような気がする)
今回のような場を提供してくださったOracleさんにありがとう!
#てらだよしお愛してる