2012/10/02

JavaOne 2012 Day 3

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

今朝、Yelp で見つけたホテルのすぐそばの Mo'z Cafe に朝ご飯にいってみたら、行列。第 2 候補としてピックアップしていた Cafe Venue も行列していて、結局朝ご飯をあきらめてしまいました。そんなこんなで、朝の街をうろうろしながら Hilton へ赴いたのでした。

ちなみに JavaOne では朝一に朝ご飯は出ないのですが、Taylor St. Cafe などでコーヒは飲むことができます。ということで、上の一枚はそんな様子です。

さて、今日聴講したセッションは...

Facebook の今日の備忘録

Advanced JVM Tuning はなんか期待と違うんですよね。こういう起動オプションを使えばこうなるという説明ばかりで、じゃあどういう時にそれを使えば効果的なのかとか、使うことによってどれだけ効果があるのかという具体的なところがないんですよね。そういえば、去年の JavaOne でも同じようなセッションで同じような感想を持ったことを思い出しました ^ ^;;

でも、セッションが終わっても、スピーカのところに質問に来る人が多数。それだけパフォーマンスで悩んでいる人が多いということでもあると思います。

Advanced JVM Tuning の Facebook に書いたメモ

BOF の最後の JSR 310 のセッションはなんと Q&A セッション。あれっ、JSR 310 のセッションって他になかったはずなのに! でも、もう一度調べ直してみたらありました。CON4350 - From Instants to Eras, the Future of Time in Java。しかし、このタイトルからだと JSR 310 とは分かりにくい >< 完全に見落としていました。

このセッションに出るために、夕ご飯を食べていた Ferry Building から大急ぎで帰ってきたのに....


_DSC0941

Advanced JVM Tuning の David Keenan

_DSC0973

Advanced JVM Tuning の Monica Beckwith

_DSC1020

セッション終わると人がスピーカの所にみんな集まる

_DSC1476

JSR 310 の Q&A セッション

Techincal Session

CON6080 - Lambda: A Peek Under the Hood - Brian Goetz

Facebook に書いたメモ

昨日の Lambda のセッションに引き続き Brian のセッション。昨日のセッションは Project Lambda 全般というか、API の方に重点があったのに対し、このセッションでは Lambda 式をどうやって表現するかという話題です。

それはそうと、Taylor St. Cafe などで写真を撮っていたせいで、セッションに出遅れ。もちろん、遅刻はしていないのですが、最前列は確保できず。前から 10 列目ぐらいで聴講しました。

ところが、セッション会場の Hilton の Golden Gate は天井が低いのに、スクリーンはさらに低い位置に設置されています。そして、Brian は小さい字で、しかも後ろの方からだと絶対に見えない下の方にも字を書いてくる。やめてー。

結局、デジカメをライブビューにして写真を撮って、それで資料を確認するということをしてました。

別にホテルでセッションをするのはいいんだけど、こういうところはもうちょっと気をつかって欲しいなぁ。

さて、セッション内容です。

Java の Lambda 式は無名クラスのインスタンシエーションの簡易記法であるわけです。でも、Lambda式をすべて内部クラスに変換していたら、クラスがむちゃくちゃいっぱいになるよねが出発点。

じゃあ、InvokeDynamic で導入された MethodHandle で書いたらどうかと続きます。

しかし、Lambda が言語レベルのメソッドオブジェクトを表しているのに対し、MethodHandle は VM レベルのメソッドオブジェクトを表すという違いがあります。

MethodHandle を使うとしたら、Lambda の脱糖衣化してメソッドに変換するか、MethodHandle を使って Lambda を表現するかのどちらかになります。

しかし、この場合、Lambda を引数にとれる (というか、関数型インタフェースを引数にする) メソッドのシグネチャを MethodHandler にしなくてはならなってしまいます。

だったら、invokedynamic 使えばいいじゃないということになるわけです。Lambda は引数の型を省略して書けるので、indy を使えば型推論を実行時に行なうことが可能です。

そのために、Lambda 式を脱糖衣化してメソッドに変換する必要があります。そして、bootstrap でその変換を行なってしまうわけです。

このように indy を使うことでパフォーマンスもかなり向上します。最悪の場合でも、内部クラスとして Lambda を表現するのと同等、通常は 5 ~ 20 倍ぐらいパフォーマンスが向上します。

なお、JavaOne 後に公開された Project Lambda の Dveloper Preview b62 では Lambda を indy で表現するようになっています。

CON7263 - JVM JIT for Dummies - Charles Nutter
_DSC1025

Facebook に書いたメモ

Charles による JVM 講座で昨日の続きです。今日は JVM の最適化や JVM をどうやって実装するかという、より深いところについて。でも、これ絶対に for Dummies じゃないですよ!

HotSpot VM はミックスモードで動作していて、インタープリター的な動作とネイティブコードにコンパイルしたコードの両方を扱っています。実行時にプロファイルを行なって、ボトルネックになるところをネイティブ化し、最適化を行ないます。

最適化として説明されたのが

  • メソッドインライン
  • ループの展開
  • ロックの省略
  • 使われないコードの排除
  • 重複コードの排除
  • エスケープ解析

です。

ちなみに、最適化された部分があまり使われていないようであれば、脱最適化が行なわれます。

後半はこのような JVM の状況を知るための起動オプションや、どうやってスタックマシンをレジスタマシン上に実装するかという話題。最後はほんとにアセンブラですよ!

さすがにアセンブラを見せられてもという感じはするのですが... それでも Charles の話し方だと、なんとなく理解しているように錯覚させてしまうのが怖いww

CON4644 - JavaFX Extreme GUI Makeover - Angela Caicedo and Simon Ritter

Facebook に書いたメモ

前の 2 つのセッションは Hilton の Plaza という部屋だったのですが、ここはまったく WiFi がつながらないし、携帯も使えないぐらい電波が弱い。しかも天井低いので見にくいし...

で、やっとこのセッションで Imperial Ballroom へ移動。ここは天井高いし、スクリーンも高い位置なので、すごい楽。しかも WiFi つながるし。こっちをメインにしてほしいなぁ。

さて、GUI Makeover は Sun の時代から綿々と続けられているセッション。以前は Chet Haase などの Swing の開発者が担当していて、JavaFX になってからも Jasper Potts などの JavaFX の開発者が担当していたのですが... 今年は Angelar と Simon というエヴァンジェリストチームになってました。ちょっと残念。

Angela は黒い服のことが多くて、今日も黒の Oracle のポロシャツ。Simon はいつも通り赤いシャツです。

City Explorer というデモアプリと、Casino のデモアプリの 2 つを題材にするのですが、このコンビはもう 1 つセッションを持っているらしく、City Explorer はそちらで説明するらしいです。

で、Casino のデモアプリをどうやって作るかという説明。といっても見た目のところだけですが。

はじめは Angela が CSS について。

JavaFX の CSS には HTML の CSS にはない機能もいくつかあります。

たとえば、derive 関数。derive 関数はある色から明度を 10% あげた色などを得ることができます。フォーカスされている時には明るくするとかなどが簡単に書けるようになるわけです。

また、グラデーションも HTML の CSS よりいろいろと指定ができるようです。

続いて、Simon によるエフェクトとアニメーション。

カジノのアプリではアイコンにリフレクションを使うなど、いろいろなところにエフェクトを使用しています。選択されたら大きく表示されるなどもアニメーションで行ないます。

具体例として、スライドインしてくるメニューで解説が行なわれています。

最後に複数画面を持ったアプリケーションをどうやって制御するかという話題。ここでは個々の画面について FXML とコントローラクラスを記述して、場面によって動的に入れ替えている様子を説明していました。

それにしても、このデモアプリ公開してくれないかなぁ....


_DSC1138

_DSC1185
CON10844 - The Modular Java Platform and Project Jigsaw - Mark Reinhold

Facebook に書いたメモ

なんと、90% ぐらい去年と同じですよ!!! 大丈夫なのか Jigsaw!!

新しいところは Export と View のみ。

細かいところを見ればいろいろと進んでいるようですが....

Jigsaw が Java SE 9 に伸びてしまったわけですが、その技術的な理由として次の 2 点が上げられています。

  • Dynamic Modularization
  • Containers

また、テストなどにかける時間がぜんぜん足りていないようです。すでに Dev Preview が公開されているので、ぜひフィードバックをと呼びかけていました。

また、Technical Keynote では失敗してしまった、最小限の JDK のモジュールで JavaFX のスケジュールビルダーをどうさせるというデモも行なっていて、今度はちゃんと成功してました。

Rasberry Pi ではないので、当たり前といえば当たり前なのですが。


_DSC1245

_DSC1341

デモ担当の Mandy Chung

BOF

BOF3673 - Dynamic Instrumentation of Java Statically Defined Tracing - Amit Hurvitz
_DSC1372

Facebook に書いたメモ

動的なバイトコードの操作についてのセッションで、もっとバイトコード操作の話があるかと思ったのですが、意外に少なかったのです。でも、BTrace をどうやって作っているかが聞けたので、よかった。

はじめは DTrace の話。

DTrace のように Java のアプリケーションをトレースする手法として Java Statically Defined Tracing (JSDT) があります。しかし、JSDT は静的なトレース。事前に DTrace のプローブを作って、埋め込んでおく必要があります。

動的にプローブをしかけるための手段としてバイトコード操作を使います。バイトコード操作をするには、

  • Java Attach API
  • Java Instrumentation
  • ASM

を使う必要があります。最後の ASM は他のバイトコード操作のライブラリでもかまわないと思いますが。

で、これらを使っているのが BTrace です。

BTrace のプローブはもちろん Java で書けます。プローブには @BTrace アノテーションを付加して定義します。

BTrace と JSDT を使ったトレースについては以下のドキュメントがリファレンスとしてあげられていました

おまけ

_DSC0453

去年、Duke はあんまり表われなかったのですが、今年は Hilton 近辺にいることが多いみたいです。それにしても、今年は妙に行動が激しい。ダンスしたり、鼻 (なのか?) を押しつぶしてみたり。

あまりにも行動が速いので、写真に撮っても被写体ぶればかり。もうちょっと落ち着いてよ、Duke!!

Taylor St. Cafe でおもしろいものも見つけました。水筒に水を入れるための Water Station です。

JavaOne 以外にも、こういう水筒に水を入れるための水飲み場を何カ所か見たので、流行なんですかねぇ。

JavaOne にはぜんぜん関係ないのですが、今月末はハロウィーン。街の中でもハロウィーンにちなんだものがいろいろとあります。デカイお菓子のパッケージとか。

そんな中、ハロウィーンの店というか、ホラー的なものを扱う店があるのです。店先には下の写真のようなディスプレイが。これはかなり怖いですよ。それにしてもこれを買う人いるのかなぁ。


_DSC1223

_DSC1479

0 件のコメント: