The Java performance debate
Javaの性能についての議論
OSNews.comで,Javaの性能についての記事(The Java performance debate)が,かなり熱いことになっていました.
Javaの性能の話は,Javaが登場した10年前から,頻繁になされていて,たいぶ食傷気味なのですが,この記事では,いくつかの興味深いベンチマークに触れていたので,とりあげてみます.ちなみに,Java自身は,すこし前にJ2SE 5.0もリリースされたり,それなりに良くなっているのでが,昔からの「遅い」というイメージはなかなか払拭できていないようです.
記事の論調は,要約&超訳するとこんな感じです.
- 「Javaは遅い,Javaはメモリ食い」と一般的に言われている.
- Javaの悪評の多くは,JVMの消費するメモリ・起動時間であり,アプリケーション自体ではない.
- 現在,Sunが複数プロセス間でのJVMの共有に取り組んでいるので,それが完成すれば,ある程度解決することが期待できる.The Multi-Tasking Virtual Machine: Building a Highly Scalable JVM
- クライアントアプリケーションの場合,Swingがボトルネックとなりやすい.
- Javaアプリケーションは,まだまだ性能上の改善の余地があるため,アプリケーションの問題をJavaの本質的な問題と混同しているのではないか.
主張する内容は,だいたいそうかな,と納得できるのですが,もうすこしサーバ側の観点や,C++相手だけではなく,Perl/Python相手の話も欲しかったところです.
各種ベンチマーク
上の記事で示されていたベンチマークで,興味深いのをいくつか紹介します.
The Computer Language Shootout Benchmarksでは,いろんなベンチマークを様々な言語上で動作させた結果を見ることができます.全体では,下のような結果(一部抜粋)になっています.Javaは,C++よりは遅く,Perlよりは速い,という,それなりの結果となっています.
言語 | スコア(Overall) |
C++(g++) | 19.72 |
Java | 18.57 |
Perl | 12.50 |
ちなみに,オブジェクトのメソッド呼出しのベンチマーク(object-methods (deprecate) benchmark)は,言わゆる動的型付け言語は,静的型付け言語の2ケタ落ちぐらいの性能ですね.(でも,smalltalkは,かなり健闘してますね.なんででしょう?)
他にも,'The Java Faster than C++' Benchmark RevisitedとかPerformance comparison C++, C# and Javaとかが参考になります.
ただ,これらのベンチマークで言えることは,いずれも比較的小さなプログラムによるもので,ある程度の得意・不得意の傾向は捕む程度に過ぎないということがあります.本当に知りたいのは,ある程度の規模を持ったアプリケーションを実装するには,どの言語が適しているか?,ということで,この問題には,それほど答えてくれていません.結局のところ,開発する人の慣れや趣味,といった環境の要因のほうが大きそうです.