Java Performance

3日目にJava Performanceと名づけられたセッションがあった。講師はSunのPerformance EngineerであるTom Marble。
やはりMycom PC Webの記事が詳しい。

http://pcweb.mycom.co.jp/articles/2005/11/10/javaone3/

これを見るとJavaがどれだけ速くなったかが良くわかる。
JDK1.2.2に対して、Mustangは7.5倍も速い。

私が個人的に興味深かったのはSunが既にIBMTigerをテストしていたことだ。
先日書いたとおりある個人の報告では遅いと出ていた。Sunの結果も遅いと出ている。J9は全く新しくSunのIPフリーで実装したJVMだが、その分こなれていないのではないだろうか?
記事でも指摘しているとおり、どのようなオプションで実行したかもわからないのであまり鵜呑みにはしないでほしい。


IBMが新しくWebSphereのベンチマーク値を公開した。たぶんMicroSoftがまた攻撃してきたので反撃だろう。

IBM posts new SPECjAppServer2004 score
New Microsoft and WebSphere Application Server Benchmarks

正直、どちらも読んでいないのだが今現在のJ2EE1.4の報告であることを追加しておきたい。丁度Tomさんが言っておられたのだがSPECJapp2004には問題がいくつかあるそうである。例えば新しい機能を使っていないとか、ArrayのCopyが20%を占めるだとかである。そのため業界の重鎮が集まり*1、SPECJapp2005が既に用意されたそうだ。


ところでMYCOM PCWEBの記事に一部わかりにくい表現があった。

GCの動作が不要であると判断した場合には、-XX:+DisableExplicitGCといったオプションを指定してGCの動作を停止する方法もパフォーマンスの向上に効果的だという。

恐らくこれはこう言いたかったのだろう。
System.gc()はメジャーGCをリクエストする命令だ。
リクエストするだけで実行される保証もないのだが、マイナーGCでなくメジャーGCを行うので非常に停止時間が長い。さらにJVMの予定に関係なくこれを起動しても結果的に総停止時間は長くなる。System.gc()の利用はお勧めできない。これは明示的に禁止してよい項目であり、上記のオプションを用いて実行できないようにしてしまうべきである。
GCの動作が不要である、なんてことは有り得ない。なぜならJavaのクラスライブラリだけでもオブジェクトを大量に生産する。どんなに頑張ってもGC無しではJVMはすぐにヒープを使い切って異常終了してしまうはずだ。

*1:もちろんIBMの名も挙がっていた