2012/10/03

JavaOne 2012 Day 4

このエントリーをはてなブックマークに追加
_DSC2079

水曜日ともなると、だんだん疲れてきて、朝起きる気力もなくなってきます。明日は絶対に朝起きられないし.... というのも、今日は Tresure Island で Oracle Appreciation Event があったからです。

Appreciation Event では Kings of Leon と Pearl Jam のライブがあって、ホテルに帰って来たのは夜中の 2 時だったのでした ^ ^;;

今日、聴講したセッションは以下の通り。今日は Appreciation Event があるため、BOF はなしで、Technical Session のみです。

Facebook に書いたノート

今日は Software Modularity Paradoxes, Principles, and Architectures が外れ。Jigsaw や OSGi の話もするのかと思っていたら、まったく関係ない話。Jigsaw の言及がないなと気づいた時点で、興味がなくなってしまいました。

そうなると、おそってくるのは眠気。まばたきをしたら、なぜか 30 分も経ってました >< ということで、ぜんぜん内容が分かってません。


_DSC1734

Andrzej Olszak

_DSC1738

Jaroslav Tulach

Technical Session

CON6583 G1 Garbage Collector Performance Tuning - Charlie Hunt and Monica Beckwith
_DSC1615

Facebook に書いたメモ

昨日の Advanced JVM Tuning の続きのセッション。

Charlie Hunt が黒い T シャツ着ているなぁと思ったら、Dreamforce の T シャツでした(右の写真)。と思ったら、Charlie が Oracle を辞めて、Salesforce に転職していた!!

Oracle の人が喋るセッションは必ず資料の一番始めに Safe Harbor があるのですが、Charlie が Oracle 辞めたから何でも話せるよと冗談。それって、冗談になってないですよ。

前半は G1GC の概略で、後半が G1GC の評価についてです。

G1GC は Java SE 7u6 でかなりパフォーマンスが向上しているようです。特にフル GC に時間がかかりすぎている、もしくは高頻度でフル GC が発生する場合や、より小さいヒープで運用したい時に G1GC は効果的だとしています。

G1GC は CMS と異なり、動的に Eden, Survivor、Tenure の領域がアロケーションされます。そして、使われなくなった領域は開放されます。

CMS と同じように Young GC はコピー GC なのですが、Old GC もコピー GC が行なわれます。このため、マークが CMS とはかなり動作が異なります。

CMS と G1GC はアルゴリズムがかなり異なるので、起動オプションもぜんぜん違うものになります。さすがに -Xmx などは同じですが、-XX で指定するオプションはぜんぜん異なります。

後半は Charlie から Monica にバトンタッチ。G1GC の評価やチューニングのヒントについて。

まずは G1GC のログの読み方。G1GC のログは 7u4 から導入されたようです。起動オプションの -XX:+PrintGCDetails でログを見ることができます。

ログではパラレルに処理されている、それぞれの処理についても表示し、スレッドごとの平均や最大最小まで表示しています。

-XX:G1LogLevel という起動オプションもあり、fine、finer、finest を指定することができます。finest の場合は -XX:+PrintGCDetails とほぼ同じ内容のログを出力します。

これ以外にも、チューニングを行なうためのいくつかの起動オプションを示しています。


_DSC1631

_DSC1669
CON6784 JavaFX Graphics Tips and Tricks - Richard Bair
_DSC1753

Facebook に書いたメモ

今回の JavaOne で櫻庭にとって、一番おもしろかったセッションです。

今まで JavaFX に関するセッションは、ほとんどが機能に関するものだったわけですが、このセッションは非機能要求であるパフォーマンスについて。

パフォーマンスの tips について紹介していくのですが、これをやらないと very sad になるよということらしいですww

まずはじめはベンチマーク。

GUIMark 2 を使って、JavaFX と Chrome や Safari などと比較しているのですが、それはもちろん JavaFX の方が速いでしょうに。ただ、Mac の Safari でベクターグラフィックだけは妙に速い値を出してました。

その後、JavaFX 2.2 と JavaFX 8 の比較。だいたい、2 倍のパフォーマンス向上になっています。

さて、JavaFX という GUI を作る時のルール 2 つ。

  • Rule #1: Do Less Work
  • Rule #2: Know Your Device

おもに話は Rule #1 の方でした。なるべく描画させる部分を減らすというのは GUI では鉄則ですね。JavaFX の場合は、まずノード数を減らすことが重要になります。

同じように大きい領域を塗りつぶすのは非常にコストの高い処理になります。重なっている下の部分は描画しないようにするとか、ダーティーリージョンだけを描画するようにするなどして、再描画の領域をなるべく減らすことが重要です。

JavaFX に特有なこととして、CSS もあります。CSS のセレクタの書き方によってパフォーマンスはかなり変化するらしいです。また、Node#setStyle メソッドで CSS を指定することもコストがかなり高いようなので、できるかぎり行なわないのが常道です。ただ、setStyle は便利なんですよね。

JavaFX のコレクションの書き方によってもパフォーマンスに違いが出ます。

JavaFX のコレクションは要素が追加されたり削除されると、ノティフィケーションが発生します。バインドやトリガーを行なうためにはノティフィケーションは必要なのですが、あまりにも追加・削除が頻繁に行なわれるとパフォーマンスは低下します。

たとえば、add メソッドで何度も要素を追加するのではなく、addAll メソッドでまとめて追加するなどの工夫が必要です。

Rule #2 の方は、使用している GPU などを認識することが重要です。デスクトップ PC では 100K のノードでも大丈夫ですが、組み込み用とでは 500 から 1,000 個ぐらいのノードに抑えておく必要があります。

より小さい組み込み機器では 100 から 200 ぐらいになります。

ターゲットとしている機器によってノード数を調整することが必要になるわけです。

最後に JavaFX 8 で導入予定の Pulse Logger について。起動オプションの -Djavafx.pulseLogger=true でログが出力されます。

CSS やレイアウトなどの処理時間などもログに出力されるので、パフォーマンスチューニングに役立てることができます。

CON6837 Rendering in JavaFX with the New Canvas Feature - Jim Graham and Joe Andresen

Facebook に書いたメモ

セッションに出るまで全然気がついていなかったのですが、なんと Jim Graham ですよ!!!

彼は Java の黎明期からクライアントチームにいて、AWT や Java 2D を実装していた人です。おなじくクライアントチームにいた Amy Fowler (今は JavaFX のチームにいます) の blog に当時の写真が出てましたけど、まだ辞めずにいたとは!!

ちなみに、真ん中にいる V ネックのセータにオレンジのシャツを来ている人がおととい Strategy Keynote で Java SE について喋った Georges Saab で、右端の女性が Amy Fowler です。

うーん、懐かしい。

さて、このセッションは JavaFX 2.2 で導入された Canvas についてです。最近こそ Canvas というと、HTML 5 の Canvas のようですが、AWT の頃から Canvas はありました。

JavaFX の Canvas も AWT の Canvas と非常に似た使い方をします。つまり、Java 2D で描画するのと基本的に同じです。

つまり Canvas から Graphics2D に相当する GraphicContext を取得して、fillRect や fillOval するわけです。ただし、線だけ描画する drawX 系のメソッドはありません。JavaFX では fill と stroke は一緒に扱うので、fillX で stroke も設定しておけば線も一緒に描画します。

ただし、Canvas は描画は Java 2D のように行ないますが、ビットマップ系のノードと考えることができます。

デモとして、Preloader を Canvas で描画するというものをおこないました。Scene Graphで描画すると多くのクラスが必要になりますが、Canvas で描画するのであれば必要最低限のクラス数で済みます。

なので、Preloader には適しているというわけです。


_DSC1940

Joe Andresen

_DSC1941

Jim Graham
CON4726 Writing Your Own JavaFX UI Controls - Paru Somashekar and Jonathan Giles

Facebook に書いたメモ

先ほどのセッションの Jim よりは古くはないですけど、Paru Somashekar もずっと前からクライアントチームにいましたね。それに対して Jonathan Giles は JavaFX になってから加わったメンバー。

Jonathan とは JavaOne Tokyo 以来です。

さて、このセッションはコントロールの自作に関するセッション。JavaFX 1.x の頃は自作のノードを作るためには CustomNode クラスを派生させればよかったのですが、JavaFX 2.x になって CustomNode クラスがなくなっていたのです。

このセッションで紹介されたカスタムコントロールを作る方法は 3 種類。

  • シンプルな方法 既存のコントロールをカスタム CSS で見た目を変化させる
  • カスタムな機能を追加する場合 レイアウトコンテナを派生させてカスタム CSS を使用する
  • ライブラリとして再配布する場合 Control を派生させて、必要に応じて新しい Skin を作成し、カスタム CSS を使用する

ということではじめはカスタム CSS について。とはいっても書き方は普通の CSS です。

デフォルトの CSS を新しく生成した CSS で上書きします。こうすることで、Java のコードを変化させないでも見た目を変化させることができます。

次に機能を追加する場合です。機能を追加するだけであれば、Control クラスのサブクラスを定義する必要はありません。コンテナを派生させて、そこに必要となる機能を実装します。

この場合、Skin を作成する必要はほとんどないです。

例として、隙間なく並べられたボタンのはじっこだけラウンドにしたボタンなどが紹介されました。

最後のライブラリとして再配布する場合が一番難しくなります。

この場合は Control を派生させ、Skin も必要に応じて作成します。また、振る舞いを変化させるには Behavior も作成します。

CSS も独自のものを定義します。ここではレンジを指定できるスライダや、5 つ星などを表示するレイティングコントロールが紹介されています。

最後にちょっとだけ JavaFX 8 の UI Controls で予定されている機能について。カスタム Control を扱うための API や BIDI などがサポートされる予定です。


_DSC1999

Jonathan Giles

_DSC2005

Paru Somashekar
CON5056 Diagnosing Your Application on the JVM - Staffan Larsen
_DSC2049

Facebook に書いたメモ

アプリケーションのダイアグノシスについてのセッションで、何か新しい手法とかツールとかを紹介するのかと思ったら、JDK に付属しているツールを活用しましょうというセッションでした。

まずは、JVM へのアクセス方法から。

リモートの場合は JMX か jstatd です。JMX を使っているのが jvisualvm や jconsole など。jstatd は jstat が使用しています。

ローカルの場合は JVM にアタッチすることができます。jcmd や jstack、jmap が JVM にアタッチしています。

今後のツールとしてあげられたのが、Flight Recorder です。その他に Mission Control や JMX 2.0 などが紹介されています。

おまけ

_DSC1905

JavaOne のランチボックスはおいしくないというのが定説なのですが、なんと今年のランチボックスはおいしいという噂が!!

さっそく検証のために、ランチボックスを食べてみました。今日のランチボックスは Korean Beef Wrap、Peruvian Chicken Sandwich、そしてベジタリアン用に Curry Tofu Salad の 3 種類です。

ちなみに、アメリカで JavaOne のようなカンファレンスでは必ずベジタリアン用の食事が用意されています。

で、食べてみたのは Korean Beef Wrap。

去年に比べると確かにおいしいかも! でも、そんなにおいしいというわけではないですねww デザートについているチョコケーキは甘すぎなのは例年通り。もうちょっとなんとかならないのかなぁ。

今年はランチ用のテーブルだけがあって、イスは用意されていません。なので、みんな立食。スペースがないのは分かりますけど、これはちょっと....


_DSC1742

_DSC1876

_DSC1877

_DSC1880

_DSC1898

_DSC1885

話変わって、今年の JavaOne のリテイルショップの話。

例年、リテイルショップには Duke のぬいぐるみがあるんですが、今年はありません!! その代わり、クマのぬいぐるみが。そんなクマなんかどうでもいいから Duke を出せばいいのに。

ぬいぐるみではないのですが、Duke の人形がレジ裏においてあるという情報を寺田さんから入手。でも、もうほとんど残ってませんでした。残念。


_DSC2026

いちおう Java の T シャツは着ているのですが...

_DSC2020

マグカップはまだありました

さらに話が変わって、Candy Bar。いつも Candy Bar の写真だけなので、そこで配っているお菓子の写真も撮ってみましたww


_DSC1963

今日も混雑してます

_DSC1968

_DSC1561

_DSC1568
_DSC1571

Oracle Appreciation Event - Dive In Rock Out

このエントリーをはてなブックマークに追加
_DSC2110

Appreciation Event は Tresure Island で行なうのですが、そこまではバス。Hilton か Moscone からバスが出ています。

JavaOne 参加組は Hilton のロビーに集合。セッションが終わってから、少し時間があったので、一度ホテルに戻って写真を PC に移動させて、少しの間でもいいのでデジカメの電池を充電しておきました。

というのも、日曜日の Macy Gray のライブで電池切れを起こした後、妙に電池が消耗するのが速くなってしまったからなのです。たぶん、過放電してしまったんでしょう。

また、Tresure Island は寒いので、防寒対策。そして、再び Hilton のロビーへ。でも、まだバスが出てませんでしたww

しばらくロビーで日本人参加者の人たちと喋っていたのですが、そこに寺田さんが Richard Bair を連れてきてしまいました! すごいビックリ。JavaOne Tokyo で会ったよねと。というか、おととい挨拶したんだけどなぁ...

しばらく話をしてから、Hilton の外に出てみると、すでに行列がすごい長くなっています。

それでも、比較的待たずにバスに乗り込むことができました。

Tresure Island についたら、みなとはすぐに別行動。私 1 人だけすぐにライブ会場に向かったのでした。

そういえば、今年はブランケットの配布はなかったなぁ。

_DSC2085

バスに乗って Tresure Island へ
_DSC2083

会場に入るには事前に配布された紙のリングを手につける必要があるのですが、今写真を撮らないと!
_DSC2087

行列
_DSC2091

まだまだ続きます
_DSC2125

ついた時にはすでにライブが始まっていました。でも、今日の出演者は Pearl Jam 以外はぜんぜんチェックしていなかったのでした。

で、誰なんだろうこの人たち?

バスドラには KOL と書いてあるので、KOL が頭文字のバンド。うーん、分からん。

でも、曲を聴いて思い出しました。Kings of Leon じゃないですか!!

Kings of Leon のボーカルの Caleb Followill の歌い方が好きなんですよね。振り絞るような歌い方で。

最後のアンコールの時に、タンバリン持った人が出てきて一緒に Caleb とデュエットしたのですが、誰? パーカッションの人でゲストといってもなぁ....

と思ったら Eddie Vedder じゃないですか!!!

そう、次の Pearl Jam のリーダの Eddie Vedder だったのでした。

_DSC2141 _DSC2150
_DSC2159 _DSC2166
_DSC2180
_DSC2201 _DSC2208
_DSC2248 _DSC2249
_DSC2258 _DSC2214
_DSC2261

去年、一昨年とバンドの入れ替えにすごく時間がかかって、30 分ぐらいふきさらしのところにいたのですが、今年は意外にテキパキ。

インターバルにはオリンピックで金メダルを取った人と、Oracle Racing のクルーたちも登場して、それなりに飽きないような演出になってました。

そして、登場したのが Pearl Jam。MC が Pearl Jam のことを紹介するとか、そういうのは何もなしで、ライブは淡々と始まったのでした。

実をいうと、Pearl Jam はよく聞くんですけど、Pearl Jam の人たちがどういう姿形の人たちなのかイマイチよく分かっていなかったので、もしかしてまた前座のバンドとか思ったのですが... Eddie Vedder が出てきて、やっと Pearl Jam と分かったのでしたww

Eddie Vedder ははじめから飛ばしまくり。もっと落ち着いて歌う人なのかと思っていたんですけど、パワフルでしたww

Do the Evolution からアンコールの Baba O'Riley まで約 20 曲。途中、Just Breathe のようなしっとりとした曲を挟んだりしましたけど、基本的にはロックンロール。いいなぁ、こういうの。

最後の Baba O'Riley は The Who の曲。こういう曲もやるんですね。Eddie Vedder はこの曲でタンバリン。でも、すぐに客席に投げてあげてしまいます。すると、また袖からタンバリンが投げ入れられる。

Pearl Jam のライブでこれは定番になっているんですかねぇ。

_DSC2295
_DSC2311 _DSC2321
_DSC2329 _DSC2494
_DSC2601

手にしているのは金メダルです
_DSC2680 _DSC2731

_DSC2949

_DSC2903
_DSC2650
_DSC2799
_DSC0639

_DSC0666 (2)

_DSC0816
_DSC0872

ライブが終わったのが 11:30 ぐらい。

その後、ゲームエリアなどをブラブラ。なんと、海には Oracle Racig のヨットが!! 日曜日には America's Cup の予選があるのに、こんなところに係留していて大丈夫なんでしょうか?

ところで、去年も一昨年もライブの後食べものはまったく残っていなかったのですが、なんと今年はまだ残っていました。

でも、あんまり写真撮ってません。というのもカメラのバッテリー警告が出ていたのでした。ライブの時にバッテリー切れなくてよかった。

それにしても、今日はよく撮ったなぁ。人生ではじめて 1 日で 2,000 枚以上撮りましたww

_DSC0892

_DSC0913

_DSC0947

_DSC0956

_DSC0968

_DSC0951

_DSC0975

_DSC0983

_DSC0985
_DSC0926