というわけで、Java Performance Tuning です。
今日の真打ちの Menasse に会うのは約 1 年ぶり。去年の JavaOne で石原さんに紹介していただいたのです。
会場はほぼ満員。立ち見になりそうだったので、ゼミ室のイスまで動員されたほどです。熱気でかなり暑くなってしまいました。
私はいつも通り Mustang。何度も講演をしているのですが、やっぱり講演って難しいですね。今日はスライドを戻すことが多かったことが反省要因です。ぎりぎりに資料を作っているのが悪いのですが、どうしても〆切ドリブンなもので... すいません。
後、プロジェクタのコントラストが低くて資料が見にくかったかもしれません。これは稚北に改善してももらいたいと思います。
ところで、講演中はとても汗をかきます。だらだらとたれるほどではないのですが... でも、講演が終わると自分で汗くさいのが分かるほど。
で、水分補給。Starbucks のコーヒーを自前のタンブラーで飲んでいたら、M さんに「さくらばさんって、おちゃめなんですね」といわれてしまいました。私にはどこがおちゃめなのかよく理解できないのです... ^^;;
Java Performance Technique, Menasse Zaudou
さて、次の Menasse のセッションは得るところがかなり多かったです。新しい機能はいろいろと紹介されますが、継続的に進化しているものはなかなか取りあげられることが少ないということもあるかもしれません。キーワードとしては知っていたものの、本当は全然知らないというものがいっぱいありました。
そいうえば、update リリースは Buf Fix がおこなわれることは周知ですが、パフォーマンスの向上も図られているらしいです。これはマイナーバージョンアップがなくなったためかもしれません。
たとえば、5.0 update 6 では Old 領域に対する Parallel GC が取りいれられたそうです。今まで、Parallel は Young 領域の Copy GC だけで使用されていましたが、Old でも使われるわけです。
他にも update 6 ではラージページがサポートされています。
Mustang でのパフォーマンスの強化点は次のようなものがあります。
- Client GC の Young 領域のデフォルト値が増加され、1MB に
- mmap() の排除
- クラスデータシェアリングの向上 (システムライブラリだけでなくアプリケーションのクラスも)
大いに気になるのが Lock 関連です。
- Bias Locking
- Lock Coarsening
Escape Analysis も気になるところ。この話題ははじめ触れない予定だったらしいのですが、無理をいって入れてもらいました。
Escape しないオブジェクトとしては
- メソッドの引数でのオートボクシングされるオブジェクト
- コレクションの Iterator
- 文字列の連結で使用される StringBuilder オブジェクト
などがあるそうです。
メソッドの引数でオートボクシングされるオブジェクトは、メソッドがインライン化される場合に限るようです。また、文字列の連結は明示的に StringBuilder オブジェクトを使用した場合ではなく String str = "abc" + "efg"; のように記述されたときに、最適化で使われる StringBuilder オブジェクトです。
Java EE の話題もあったのですが、櫻庭の琴線に触れたのは Grizzly。Glassfish に含まれる HTTP サーバですが、NIO を使ってむちゃくちゃ早いという噂を聞いていたからです。
Tomcat はもちろんですが、Apache よりも早いらしいです。これは使うしかないでしょ。
パフォーマンスチューニング・コンサルティング 岡崎 隆之
次の市村さんは製品紹介だったのでパス。だって、会場が満杯でずっと立って Menasse のセッションを聞いていたので、疲れてしまったのです。すいません、市村さん。
次の岡崎さんはコンサルの立場からの講演。
で、私が思ったのはやっぱり "みんなプロファイラ使おうよ" ということ。岡崎さんは NetBeans Profiler を紹介していましたが、Eclipse TPTP でも、Optimeizeit でも、JProbe でも何でもいいからまずは測らなくちゃはじまらないということ。
後は小手先はダメだなぁということ。結局、パフォーマンスが出ないのは設計が悪いことが多いんですよね。設計から見直さないと、適切なパフォーマンスが得られないんだなぁとあらためて思いました。
さすがコンサルだと思ったのは、Java だけにとらわれず、使えるものはなんでも使うという姿勢。ログから必要な情報を抽出するために Perl を使うとか。私も見習わなければなぁ。まずはスクリプト言語を使えるようにしなければ。
セミナの後は、セミナの打ち上げではなくて、SDC の座談会。
ひきつづき Menasse と岡崎さん、そして稚北の学生代表ということでキムティ。どちらかというと、私の疑問点を解消してもらうための座談会になってしまいました ^^;;
VM のパフォーマンス向上はもう行きつくところまでいってしまっているように感じていたのですが、まだまだ先はあるんですね。
JVM だけでなく、話はライブラリやフレームワークにまで飛びました。VM が高速だとしても、その上で動作するライブラリが低速ではしょうがないわけです。
実際にクオリティの低いライブラリもあります。過去からの経緯でどうにも変更できないというものあると思います。
Java 単体でのパフォーマンスは今は十分に高いです。遅いという場合は、問題の切り分けをちゃんとして、どこがボトルネックになるかを調べる必要があると思います。
当たり前なんですけどね。
座談会の後にちょっと時間があったので、Menasse にフライングで JavaOne の資料を見せてもらいました。VM やパフォーマンスチューニングに興味がある方は下のセッションが参考になるはずです。
- TS-1168 Performance Through Parallelism: Java HotSpot Virtual Machine Garbage Collection Improvements
- TS-3412 New Compiler Optimizations in the Java HotSpot Virtual Machine
- BOF-0197 Java HotSpot VM Q&A BOF
また、参考になる文献も
ところで、一番右の写真は私がおみやげに持っていった Giotto のオリーブオイル フィナンシェ。M さんに持っていくと約束していたのでした。
今週、新宿伊勢丹で Giotto が出店しているのです。私は Giotto が日本に常設の店舗を持っているって知らなかったのですが、M さんはちゃんとチェックされてました。負けた... orz
銀座は行動半径から外れるので、どうしてもチェックが甘くなってしまうのです。と、いいわけをいってみます。