プログラムの速度
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/14 21:52 UTC 版)
Javaプログラムの平均的な性能は徐々に向上しており、Javaの性能はCやC++に匹敵するほどになっており、Javaが低速な場合もあるが、高速な場合もある。2009年3月の時点で、Java は Computer Language Benchmarks GameにおいてC/C++より5-15%遅い。ベンチマークは小規模で数値演算中心の性能を測定するとも言われる。これは、おそらくCに有利に働く。実際のプログラムでは、JavaがCを上回ったり性能の差はなかったりする。例として、Jake2(Quake 2クローンで、GPLのCコードをJavaに変換して作成)のベンチマークがあり、Java 5.0のバージョンは、同じハードウェア構成でCの性能を上回る。データがどのように計測されたか明確ではないが(例えば、オリジナルのQuack 2の実行ファイルが1997年にコンパイルされたものであれば、現在のコンパイラではよりよい最適化を行うことができる)、Javaの同じソースコードがVMを更新するだけで大きく性能向上しており、これは100%静的にコンパイルする方法では達成できない。 また、Javaや類似の言語では可能な最適化で、C/C++では実施できないものもある。 C形式のポインタは、ポインタをサポートする言語での最適化を困難にする。 コードがプログラムの実行前にコンパイルされるため、#適応的コンパイルは完全にコンパイルされたコードでは実施できず、アーキテクチャの機能や、コードパスを用いた最適化の恩恵を受けられない。いくつかのベンチマークの結果は、C/C++の性能はプロセッサアーキテクチャに対応したコンパイルオプション(たとえばSSE2の利用など)に強く依存しており、JavaプログラムはJITコンパイルにより対象のアーキテクチャに適応できることを示している。 エスケープ解析の手法は、オブジェクトがどこで使用されるかをコンパイラが知ることができないため、たとえばC++では使用できない(また、ポインタの使用が原因でもある)。 しかし、JavaとC/C++でのベンチマークによる比較は実施する作業に大きく依存する。例えば、Java 5.0と比較すると、 32 / 64ビットの数値演算、ファイル入出力、例外処理 ではC/C++と同等の性能を示す。 コレクション、オブジェクトの生成、解放、メソッド呼び出しの性能 では、Javaの方がC++より性能が高い。 配列 の操作はC/C++の方が高速である。 三角関数 の性能はC/C++の方が高い。
※この「プログラムの速度」の解説は、「Javaの性能」の解説の一部です。
「プログラムの速度」を含む「Javaの性能」の記事については、「Javaの性能」の概要を参照ください。
- プログラムの速度のページへのリンク