Javaコンパイラ、特に プロファイルに基づく最適化 によって廃止されたパフォーマンスに関するヒントがいくつかあります。たとえば、プラットフォームによって提供されるこれらの最適化は、(ソースに従って)大幅に削減できます。仮想関数呼び出しのコストVMは、メソッドのインライン化、ループの展開なども可能です。
あなたがたどり着いた他のパフォーマンス最適化手法は何ですか?
メソッドとメソッドパラメータの最後の修飾子は、パフォーマンスにまったく役立ちません。
また、 Java HotSpot wiki は、HotSpotで使用される最適化の概要と、Javaコードでそれらを効率的に使用する方法を示しています。
String a = "this" + var1 + " is " + var2;
をStringBuilderまたはStringBufferへの複数の呼び出しで置き換える人々。実際にはすでに裏でStringBuilderを使用しています。
パフォーマンスの最適化を開始する前に、時間とメモリのトレードオフを定義する必要があります。これは私が私のメモリ/時間重視のアプリケーションのためにそれを行う方法です(完了するために上記のいくつかの答えを繰り返します):
2001年に、J2ME電話用のアプリを作成しました。レンガくらいの大きさでした。そして、レンガの計算能力に非常に近い。
Javaアプリを適切に実行するには、可能な限り手順に沿ってアプリを作成する必要があります。さらに、ArrayIndexOutOfBoundsException
をキャッチしてすべてのループを終了することで、パフォーマンスが大幅に向上しましたベクター内のアイテム。考えてみてください。
Androidであっても、配列内のすべての項目を「高速」でループし、同じことを「低速」で書く方法があります。Googleで言及されているIO dalvikのビデオVM internals。
しかし、あなたの質問への回答では、最近この種のことをマイクロ最適化する必要があるのは最も珍しいことだと私は思います、そして私はさらにJITでそれを期待しますVM(新しいAndroid 2.2 VM、JITを追加)でさえ、これらの最適化は無意味です。2001年に、電話はKVMインタプリタを33MHzで実行しました。今ではdalvikを実行しています-aはるかに高速VMよりもKVM-500MHz〜1500MHzで、はるかに高速ARMアーキテクチャ(より優れたプロセッサで、クロックスピードゲイン)L1などとJITが到着します。
Java-電話またはデスクトップでi7を使用して直接ピクセル操作を行うのに慣れている領域にはまだいないので、通常の毎日のコードはまだありますそのJavaは十分に高速ではありません。 これは興味深いブログです 専門家は、Javaの80%はいくつかの重いCPUタスクのC++速度;私は疑わしいです、私はイメージ操作コードを書き、Javaとネイティブのforループピクセルの間の桁違いの大きさを見ます。たぶん私はいくつかのトリックを逃しているでしょう。 ..?:D
RAM 32GB未満)でx64 JVMを使用する場合:
64ビットのJVMは、通常のオブジェクトポインターが大きいため、32ビットのJVMと比較して30%〜50%多くのメモリを使用します。 JDK6 +を使用すると、この要素を大幅に減らすことができます。
JDK6u6pからJDK6u22まではオプションであり、JVM引数を追加することで有効にできます。
-XX:+UseCompressedOops
JDK6u23(JDK7も)から、デフォルトで有効になっています。詳細 ここ 。
上記のリンクが古くなっています。 Java最適化: http://www.appperfect.com/support/Java-coding-rules/optimization.html に新しいものがあります。