1. 重要なループでは、ループ終了判定時のメソッド呼び出しを削除します。
次のようにコードをコピーします。
for(int i=0; i<collection.size(); i++)
{
...
}
for(int i=0; i<collection.size(); i++)
{
...
}
…と置き換えます
次のようにコードをコピーします。
プレーンコピーをクリップボードプリントに表示しますか?
for(int i=0;n=collection.size();i<n;i++)
{
...
}
2. 通常、ループインデックスに関係のない項目はループの外に移動します。
次のようにコードをコピーします。
for(int i=0;terminal=x.length;i<terminal;i++){
X[i]=x[i]/スケールA*スケールB;
}
for(int i=0;terminal=x.length;i<terminal;i++){
X[i]=x[i]/スケールA*スケールB;
}
に変更します
次のようにコードをコピーします。
ダブルスケール = スケール B/スケール A;
for(int i=0; ターミナル=x.length; i<ターミナル; i++){
X[i]=x[i]*スケール;
}
2.文字列
文字列の連結を排除する 長い文字列を作成する場合は、常に String の代わりに StringBuffter を使用してください。
StringBuffer スペースを事前に割り当てる
StringBuffer sb = 新しい StringBuffer(5000);
3. 基本的なデータ型
重要なループでは基本データ型を使用します (通常、int データ型はlong/double データ型よりも高速です)。
基本データ型 (Boolean、Integer など) のラッパー クラスは、主に、渡されるメソッド パラメーターが (基本データ型ではなく) オブジェクトへの参照である必要がある場合に使用されます。
すべての定数代数式に静的なfinal修飾子を使用します。
1 つは定数の参照を容易にします (コンパイラーが定数式を事前に計算します)。
4. 異常
例外は、単一の真のエラー条件に対してのみ使用されます。
例外のスローと catch ブロックの実行にはコストがかかります (主に、例外の作成時にスレッド スタックのスナップショットを取得するため)
例外は、条件が本当に異常な場合にのみスローされます
メソッド呼び出しごとに複数の try/catch ブロックを実装するのではなく、try/catch ブロックに複数のメソッド呼び出しを配置することで、コンパイラとランタイムを最適化します。
5.ベンチマーク
これらのヒントはすべて、プラットフォームと仮想マシンによって異なることに注意してください。
例: 一部のサーブレット コンテナでは、OutputStream を通じてバイトを出力する方が高速です。他のコンテナでは、PrintWriter を通じて文字を出力する方が高速です。
これらのヒントでは、最も移植性の高い推奨事項について説明します
プラットフォーム上で何が最速かを判断するには、いくつかのベンチマークを実行する必要がある場合があります。