Javaの性能
いくつかの独立した研究によれば、高性能計算 (HPC) における Javaの性能は、演算中心のベンチマークでFORTRANと同等であるが、JVMはグリッドネットワーク上の通信が多くなると、スケーラビリティに問題があるようである。
しかし、Javaで記述された高性能計算のアプリケーションがベンチマークで最高の成績を出したことがある。2008年、Javaで記述されたHPCのプロジェクト Apache Hadoop が、テラバイト級の整数のソートで最高速の結果を出した。
Javaライブラリにはどのメソッドが複数のスレッドから使用されるか分からないため、マルチスレッド環境で使用される標準的なライブラリは常にコードブロックのロックを行っている。
Java 6以前では、複数の異なるスレッドが同時にオブジェクトを変更するリスクがない場合でも、仮想マシンはオブジェクトやコードブロックのロックをプログラムの要求にしたがって行っていた(ロックの実装を参照)。例えば、ローカル変数のVectorがあり、それに対する add 操作を行う際、それが確実にローカルでしか使用されずロックが不要である状況でも、同時に他のスレッドから変更されないようロックを行っていた。
Java 6では、コードブロックやロックは必要なときだけロックされるようになり 、上記の例では仮想マシンはVectorオブジェクトのロックを行わない。
バージョン 6 Update 14で、Javaは実験的ながらエスケープ解析をサポートするようになった。
仮想マシンレベルの向上:
バイトコード検証の分割
エスケープ解析と粗粒度ロック
レジスタ割付の改善
その他の向上:
Java OpenGLおよびJava 2Dパイプラインの性能向上
Java 2Dの性能はJava 6で大きく向上した。
初期のJava仮想マシンはバイトコードのインタプリタであり、このことが性能に対する大きな足かせ(平均的なアプリケーションで、Java対Cで10〜20倍程度)になっていた。
Java 1.1で JIT コンパイラが導入された。
Java 1.2でHotSpotと呼ばれる技術が導入された。これは、Java仮想マシンがプログラムの頻繁に実行される箇所、「ホットスポット」の性能解析を実行中に実行し続けるもので、解析した情報は最適化に利用して、他のパフォーマンスに影響のないコードには余分な負荷をかけることなく、性能を向上させることができる。
Java 1.3でHotSpotが標準で用いられるようになった。
HotSpot技術により、コードはまずインタプリタ実行され、「ホットスポット」が動的にコンパイルされる。Javaの性能測定においてベンチマークをとる前にプログラムを数回実行させる必要があるのはこのためである。
HotSpotによるコンパイルではインライン展開、ループ展開、境界チェックの省略、アーキテクチャ固有のレジスタ割り付けなどの様々な最適化手法が用いられる。 ベンチマークによってはこうした手法により10倍の性能向上が見られる。
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++では実施できないものもある。
Javaプログラムは通常仮想マシンによって実行時にJITコンパイルされるが、 C/C++のように事前コンパイルすることも可能である。JITコンパイルされた場合、その性能は一般的に
CやC++などのコンパイル言語と比べて性能は劣る。ただ通常のタスクでは大きな性能の低下はない。
C#などの他のJITコンパイルを行う言語と同様の性能を示す。
性能の良いネイティブコードへのコンパイラ(JITあるいはAOT)を持たないPerl、Ruby、PHP、Pythonなどの言語より、大幅に高い性能を示す。