今日の朝の General Session は Sony Ericsson。なので、自主休講。
ランチ会場で丸山先生たちとおしゃべりしていたら、あっという間に General Session の時間は過ぎ去っていったのでした。
それにしても今年はいろんなところで Twitter してます。こういうマイクロブログは JavaOne のようなカンファレンスには便利ですね。ご飯の約束などもこれでできるし。
ちなみに、上の写真は Pavilion でやっている Poker の景品。ポルシェですよ、ポルシェ。ちなみに 2 位は Segway でした。
話はまったく変わるのですが、今年のテクニカルセッション or BOF は、今までと違ったところがありました。
何が違っていたのかというと、セッション会場に机があるのです。もちろん、ないところもあるのですが、広めの会場はみな机配備。こんなのはじめて。
机があるせいで、セッション中でも PC を開くのが楽。結局、Twitter をやってしまって、なかなかセッションに集中できないのでした。
というわけで、今日は次のセッションを聴講しました。
General Session
Technical Session
- TS-5575 Extrem GUI Makeover (Hybrid Swing and JavaFX Technology)
- TS-4954 Modularity in the Java Programming Language: JSR 294 and Beyond
- TS-5217 "Effective Java": Still Effective After All These Years
- TS-4861 Pro JavaFX Platform: RIA Enterprise Application Development with JavaFX Technology
BOF
- BOF-4724 Monitoring and Troubleshooting Java Platform Applications with JDK Software
- BOF-4813 SwingLabs Development Update
TS-4861 ははずれ。いちおう、JavaFX では有名な Jim Weaver のセッションだったのですが、まったくプレゼンになっていません。
もう 1 人 Stephen Chin という若い人といっしょのプレゼンです。Jim Weaver はこの若い人がいうことに突っこみを入れる役 (?)。でも、その突っこみがまるでなっていない。突っこむことによって論旨があいまいになるばかり。これでは逆効果にしかなりません。
友達どうしで話している時だったら全然かまわないのですが、こういう公の場ではダメ。せめて、Romain Guy の突っこみを勉強してから、出直してもらいたいなぁ。
2 つの BOF もはずれ。なんか内容が薄い... 今年はほんとに BOF は不作だ。
Sun General Session - Your Java Lifestyle: Mobile, TV and Beyoond
ここ数年、Java ME は初日の Technical General Session から外されてしまい、普通のセッション枠で Java ME だけの General Session をやっていました。
ところが、今年は Java ME 単独でちゃんとした General Session が行なわれました。
この枠はもともとプラチナスポンサー枠だったのです。しかし、例年プラチナスポンサーだった Oracle が、今年はスポンサーを降りてしまったのです。もちろん、買収のからみで、スポンサーができないのだと思います。
Oracle の代わりになるプラチナスポンサーがいればよかったのでしょうが、決まらなかったんでしょうね。
しかたなく Java ME 枠になったというのが櫻庭の見るところです。
ということで、もともとは Technical General Session だったという過去を持つ、この General Session ですが、Technical なところが全くないというのはどういうことなのだろう。
話のメインは JavaFX。JavaFX Mobile や JavaFX TV、そして、昨日の General Session でも搭乗した JavaFX オーサリングツール。
しかし、いずれもデモのみで、新しいバージョンの機能紹介とか、今後のロードマップなどまったく説明されません。こんなんでいいのか?
JavaFX 以外は他の企業で、たとえば PayPal や、Sony Ericsson、Qualcomm などからゲストを呼んで話をしたり、デモするだけ。こういうないようなのであれば、初日の朝の General Session でやってもらいたいですね。
確かにメディア受けはすると思いますけど、開発者にはつまらないです。
ちなみにこのセッションでも T-Shirt 投げがありました。このためにだけ James Gosling が駆り出されてましたよ。T-Shirt 投げが終わったら、T-Shirt 用スリングショットを持ってすぐに帰って行ってしまいました。
ちなみのちなみですが、ここで T-Shirt を受け取った人は JavaFX Phone ももらえるというおまけ付き。これはちょっと欲しかった ^ ^;;
MC は Chris Melissions |
でも、すぐに Eric Klein にバトンタッチ |
Eric Klein は猫背 |
Eran Davidov と JavaFX Mobile のデモ |
PayPal の Osama Bedier |
Orange の Steve Galgow |
Qualcomm の Rob Chandhok。Smartbook について語る |
General Session 後の大混雑 |
TS-5575 Extrem GUI Makeover (Hybrid Swing and JavaFX Technology)
Extream GUI Makeover は毎年行なわれている名物セッションですが、去年から JavaFX を使いはじめました。今年は Hybrid というので、Swing アプリで一部だけ JavaFX を使う話かと思ったら... 逆でした。
でも、それは当たり前すぎてつまらないなぁ。
毎年、何かしらのアプリケーションを取りあげて、それを徐々にかっこよくしていくというスタイルで進みます。
今年の題材は JavaOne 2006 の Extrem GUI Makeover。ちなみに 2006 年は Chet Haasse や Romain Guy が担当していたはず。
すでにあの時点でそれなりのかっこいい GUI になっていたのですが、もっと見栄えをよくしようというわけです。
たとえば、イメージを下に反射しているように表示することや、アイコンにマウスカーソルが入ると文字が浮きでる、イメージを角丸にするなどを紹介しました。こういうのは JavaFX を使うと簡単にできます。
また、CSS で背景色やフォントを設定することなどを紹介しました。
ちょっとおもしろかったのが、ページをめくる動作。3D は使わずに 2D だけでやっています。自分でもやったことがあるのですが、どうもうまくページがめくれていくように見えないのです。
今日気がついたのは、影のつけかた。そうか、あすこに影をつけるともっともらしいんですね。
Amy Fowler |
David Grieve |
Paru Somashekar |
Jasper Potts |
TS-4954 Modularity in the Java Programming Language: JSR 294 and Beyond
いったんなくなってしまった JSR 294 ですが、JSR 277 がキャンセルされたおかげで復活です。
まったく気づいていなかったのですが、この前のセッションが Mark Reinhold の Project Jigsaw のセッションでした。しまった、GUI Makeover なんかじゃなくて、Jigsaw のセッションに出ればよかった。
もう一度おさらいしておくと、JSR 294 はインプリメンテーションのモジュール化を目指し、module というモジュール (以前は supperpackage と呼ばれていました) を導入しようとしています。
一方の JSR 277 はデプロイメントのモジュール化を目指し、JAR ファイルの代わりに JAM ファイルによるモジュール化を行なおうとしていました。
そして、去年の JavaOne 2008 ではインプリメンテーションとデプロイメントを別々に考えるのではなく、一緒に考えようということで JSR 277 に統合されたのでした。
しかし、去年の暮れになって JSR 277 が急にキャンセルされたのです。
そして、その後 Jigsaw でより低レベルのモジュール化を行なうことになりました。Jigsaw もインプリメンテーションとデプロイメントの両方の側面を持っていますが、インプリメンテーションの部分に関しては JSR 294 を採用することになりました。
つまり、もともとの JSR 277 で提唱されていた JAM がはじかれてしまったように見えます。確かに JAM はとても評判が悪かったので、しかたないかもしれません。
Jigsaw は言語や VM の部分は JSR 294 をそのまま採用し、パッケージングに関しては JAR ファイルをそのまま使用します。とはいってもバージョニングなどの問題があるので、それらの問題を最小限の変更で解決しようというところのようです。
それが低レベルのモジュール化ということを表しているようです。
そして、Jigsaw のリファレンスインプリメンテーションを行なっているのが OpenJDK のサブプロジェクトである Project Jigsaw です。
で、このセッションは JSR 294 に関するものです。なので、Jigsaw で決めているデプロイメント関連のモジュール化は言及されませんでした。
TS-5217 "Effective Java": Still Effective After All These Years
Effective Java も名物セッション。このセッションはほんとに人気があって、事前登録ができませんでした。で、キャンセル待ち列に並んだんですが、すでにこちらも 200 人ぐらい並んでいる。入れないかと思いました。
ようやく入れたのはセッションが開始されてから 10 分後。会場内は立ち見もいっぱい。とりあえず、床に座るとしても前の方がいいので、前にいってみたら前から 2 列目に空席があったのですかさずゲット。そしたら、斜め前には N 社の K 村さんが座ってました ^ ^;;
はじめはジェネリクスの extends や super の使い方。途中から入ったのでよく理解できていませんが、去年の PECS 原則をもう一度やっていたようです。
次が 2 値しか取らない変数でも、true と false で意味が分かりにくい場合は積極的に enum を使おうね、という話。
そして、可変数引数。可変数引数はパフォーマンスが落ちるらしいです。なので、よく使われる引数の個数が分かっているのであれば、それを可変数引数ではなく、固定引数で作っておいて、その他に可変数引数を使うという使い方を紹介してました。
たとえば、EmunSet クラスの of メソッドは引数が 5 つまでのメソッドは固定で定義されていて、それ以上が可変数引数が使われているのだそうです。
次は CocurrentMap の話。
Concurrency Utilities で定義されているクラスは synchronized で囲ったらダメ、という話。get して、値がなかったら put する時に使う putIfAbsent メソッドの使い方。Brian Goetz の本で勉強していたので、putIfAbsent メソッドは知っていましたけど、パフォーマンスを上げるにはどう書けばいいかという話。
でも、get メソッドの後、putIfAbsent メソッドをコールするまでの間に、他のスレッドからアクセスされていたらどうなるんだろう?
最後がシリアライズする時に、Proxy Pattern が使えるよという話でした。
BOF-4724 Monitoring and Troubleshooting Java Platform Applications with JDK Software
VisualVM を作っている Tomas Hurka と Mandy Chung のセッション。
今年は保守管理系のセッションがあまりありません。JMX 2.0 がもう落ち着いちゃったかもしれません。それにしても、今年は JSR-255 JMX 2.0 のスペックリードの Eamonn McManus の姿が見あたりません。もしかして、辞めちゃったのかなぁ?
セッションの前半はツールの紹介。jconsole や VisualVM など。
後半がよくあるトラブルへの対処法。取りあげられたのは
- Deadlocks
- Memory leak
- Finalizers
- High lock contentions
- OutOfMemoryError
の 5 種類です。
Deadlockに関しては、HotSpot VM にもともとデッドロック検出機能が備わっています。ツールで使えるのは jvisualvm と jstack。jstack を使う場合は -l オプションを使用すると、java.util.concurrent のロックに関する情報を取得できます。
次のメモリーリークはまずメモリ使用をモニタする、ヒープの使用量が上がっていれば次にヒープのヒストグラムから怪しそうな箇所を見つけ、ヒープのスナップショットから解析するという対応を行ないます。
最初のヒープのモニタには jvisualvm もしくは jstat が使用できます。ヒストグラムから怪しい部分を見つけるには jvisualvm か jmap -histo を使用できます。
そして、スナップショットの解析は jvisualvm、jmap -dump もしくは jhat が使えます。
ファイナライザでファイナライズがペンディングになっているオブジェクトを探すのはメモリリークと似ています。ファイナライズがペンディングされているオブジェクトを観察するには jvisualvm もしくは jconsole が使えます。
Hot Lock Contention はロックの取り合いの検出。ツールとしては jvisualvm と jconsole。
OutOfMemoryErrorはヒープなのか、パーマネント領域なのか、ネイティブコードなのか、などメモリの種類を特定します。そして、OutOfMemoryErroが生成したヒープダンプを解析します。
ツールとしては jvisualvm と jinfo -flag +HeapDumpOnOutOfMemoryError を使用します。
Tomas Hurka がスピーカなので、ツールの選択は jvisualvm よりですね。jconsole でも使えそうなところはありますが、今となったら jvisualvm なのかもしれません。
Mandy Chung |
Tomas Hurka |
0 件のコメント:
コメントを投稿