一般的なコード最適化方法


  • オブジェクトをできるだけ再利用し、forループで文字列接合を行うか、プロトタイプモードでパフォーマンスを向上させるなど、オブジェクトをループしないでください.
  • コンテナクラス初期化時に長さを指定します.例えば、List collection=new ArrayList(5);ArrayListの下位層はObject配列を用いて実現され、デフォルトでは空であり、要素を追加する際に容量が足りなければ拡張操作に関与し、拡張操作は配列の複製操作に関与する.HashMapの最下層も配列であり、各配列要素はチェーンテーブルを指し、チェーンテーブルの長さが一定値を超えると赤黒い木になるため、HashMapの初期化時にも初期サイズを指定し、resize()時の再ハッシュを避ける.
  • ArrayListのランダムアクセスが速く、LinkedListの追加削除が速い.LinkedListは双方向チェーンテーブルです.
  • Entryを使用してMapを巡回する.
  • for(Map.Entry entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
    }
  • 大配列コピーはSystem.arraycopyで、その下層はNativeコードで作られ、Cコードで作られています.
  • 包装タイプではなく、できるだけ基本タイプを使用します.
  • System.gc()を手動で呼び出さないでください.その役割は、ゴミ収集器にFullGCを作るように通知し、GCを通じてこのような方法ではなく最適化することです.
  • 期限切れのオブジェクトの参照をタイムリーに削除し、メモリの漏洩を防止する.
  • できるだけ局所変数を使用し、変数の作用域を減らす.
  • できるだけ非同期の容器、例えばArrayList VS Vectorを使用する.
  • は、synchronizedメソッドVS synchronizedコードブロックなどの同期作用範囲をできるだけ縮小する.
  • ThreadLocalを使用して、SimpleDataFormatなどのスレッドが安全ではないオブジェクトをキャッシュします.それは複雑で、作成時にリソースを消費します.使用するたびにnewを1つ使わなくても、ThreadLocalにキャッシュできます.スレッドの一例になります.
  • import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class SimpleDateFormatUtil {
        private static ThreadLocal dateFormatHolder = new ThreadLocal() {  
            protected SimpleDateFormat initialValue() {  
                return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            }  
        };
        public static void main(String[] args) {
            dateFormatHolder.get().format(new Date());
        }
    }
  • は、できるだけ遅延ロードを使用する.
  • はできるだけ使用反射を減らして、もし使う必要があるならば、キャッシュをプラスして、初めて反射が必要な時だけ反射して、それからそれを1つのキャッシュに入れて、後でキャッシュから取ります;
  • 接続プール、スレッドプール、オブジェクトプール、キャッシュをできるだけ使用します.
  • リソース、I/Oストリーム、Socket、データベース接続をタイムリーに解放します.
  • 異常を慎重に使用し、異常を投げて正常な業務論理を表示しないでください.異常も比較的重い対象です.
  • String操作の場合、できるだけ正規表現を少なくし、機能は強いが性能は低く、replaceでreplaceAllを使わないことができる.
  • ログ出力注意異なるレベルを使用する;
  • ログでは、パラメータパッチはプレースホルダを使用します.