JavaとCのベンチマーク結果を公開していたStefan Krause氏が新しいベンチマーク結果をUpdate For Java Benchmarkとして公開した。比較対象として最近のJava仮想マシン実装を取り上げていることやLLVMをベンチマーク対象に加えているところが目をひく。このベンチマーク結果がすべてを表すものではないが、ひとつの指針としておもしろいデータではある。
Stefan Krause氏は5つのベンチマークを実施。うち4つはThe Computer Language Benchmarks Gameからもってきている。ただしJava特有の遅さを回避するため、10回実行したうちの1回目は計測対象からはずされている。残りひとつはHimeno benchmark xpが使われている。
比較に使われた言語とコンパイルオプションは次のとおり。実行はUbuntu 8.04 (x86)がインストールされたDell Insprion 9400が使われたと記載されている。
- GCC 4.2.3 - "-O3 -msse2 -march=native -mfpmath=387 -funroll-loops -fomit-frame-pointer"オプション付き
- LLVM 2.3 - "-mcpu=core2 -mattr=sse42lli"オプション付きJITコンパイルコマンド
- Sun JDK 6 Update 6
- Sun JDK 6 Update 2
- Excelsior JET 6.4
- Excelsior JET 6.0
- Apache Harmony Milestone 6
- IBM JDK 6 SR1
- IBM JDK 5
それぞれのベンチマーク結果はUpdate For Java Benchmarkを参照してほしい。これらの結果から普遍的な結論を導くことは難しいが、同氏が結論でまとめているようにGCCとLLVM、JETが優れた性能を実現していること、Apache Harmonyはまだ改善の余地がみられること、Sun JDK 6は特定の性能が悪いが特定の性能は優れているといった違いが大きいことなどがわかる。
Javaの方は最初の1回目を計測対象としていないため、起動時間や最適化時間を含めればJavaの方はもっと結果が遅くなるだろう。LLVMの結果はコンパイルや実行方法を変更すればさらに高速化するとみられる。一番の注目点はJETがGCC/LLVMに匹敵する性能を実現していることだ。Javaで開発しつつネイティブパフォーマンスを求める場合には選択肢として間違ってはいなさそうだ。