Javaの性能
今後の性能改善は、Java 6のupdateかJava 7で計画されている。
JVMでの動的プログラミング言語のサポート。Multi Language Virtual Machineのプロトタイプ開発に基づく。
並列性を提供するライブラリの改善。マルチコアプロセッサ上での並列処理を行う
多段コンパイルと呼ばれる手法で、Java仮想マシンがクライアントとサーバという二種類のJITコンパイルの両方を、同じセッションで使用できるようにする。 クライアントのJITコンパイルは、起動時に使用される(起動時と小規模なアプリケーションに適しているため) サーバーのJITコンパイルは、長時間動作するアプリケーションに使用される(クライアントより性能がよいため)
既存の並列化されたガベージコレクタ (CMS collector; Concurrent Mark-Sweep collector) を、停止時間が一定であることを保証した新しい G1 (Garbage First) コレクタに置き換える。
Javaのメモリ使用量はC/C++より大きい。
32ビット環境のJavaでは各オブジェクトに最低8バイト、各配列に12バイトのオーバーヘッドが存在する(64ビットの環境では倍)。また、オブジェクトのサイズが8の倍数でない場合は、8の倍数に切り上げられる。そのため、4バイトの整数を格納するオブジェクトは32ビット環境で16バイト消費する。ただし、C++も仮想関数テーブルを持つ型は、各オブジェクトに32ビット環境で4バイト、64ビット環境で8バイトのポインタを余分に割り当てる。また、多重継承や仮想継承をするとメンバー関数ポインタのサイズが増大する処理系もある。
クラスライブラリが(最低でもプログラムが使用する分は)実行前にロードされていなければならない。
Javaのバイナリと、ネイティブにJITコンパイルしたものの両方がメモリ上に存在する。
仮想マシン自体がメモリを消費する。
Javaは言語レベルでマルチスレッドに対応している。マルチスレッドとは、下記のようなことを可能にする技術である。
並行コンピューティング - 例えばプログラムがバックグラウンドでタスクを実行中であってもユーザーがGUIを操作できるようにすることで、応答性やユーザーに与える印象を改善する
並列コンピューティング - 例えばマルチコアプロセッサのアーキテクチャを活かして、依存関係のない複数の作業を異なるコアで同時に実行し、処理時間を削減する
しかし、マルチスレッドを使用するプログラムは、スレッド間で共有されるオブジェクトやメソッド、コードブロックに開発者が特別な注意を払う必要がある。またオブジェクトやコードブロックをロックすることは、それに伴うOSの性質によって時間のかかる操作である(並行性制御やロックの粒度を参照)。