2020/1/21

效能寫法小記錄


  • 減少重複呼叫
    • for (int i = 0, int length = list.size(); i < length; i++)
  • 執行續同步使用StringBuilder,並給定適當大小
    • StringBuilder() // 預設分配16個字元的空間
    • StringBuilder(int size) // 預設分配size個字元的空間
    • StringBuilder(String str)  // 預設分配16個字元+str.length()個字元空間
    • 當StringBuilder達到最大容量的時候,它會將自身容量增加到當前的2倍再加2,無論何時只要StringBuilder達到它的最大容量,它就不得不建立一個新的字元陣列然後將舊的字元陣列內容拷貝到新字元陣列中,這是十分耗費效能的一個操作
  • HashMap這種是以陣列+連結串列實現的集合,別把初始大小和你估計的大小設定得一樣,因為一個table上只連線一個物件的可能性幾乎為0。初始大小建議設定為2的N次冪,如果能估計到有2000個元素,設定成new HashMap(128)、new HashMap(256)都可以。
  • 當複製大量資料時,使用System.arraycopy()命令 .
  • 移位運算
    • << X   *2^X
    • >> X   /2^X
  • 減少物件引用次數
  • 儘可能使用array,無法確定陣列大小時才使用ArrayList
  • ArrayList 的Interface RandomAccess , 官方建議使用for 

     for (int i=0, n=list.size(); i < n; i++)
             list.get(i);
    如果是有順序性的 sequential 
         for (Iterator i=list.iterator(); i.hasNext(); )
             i.next();
  • 程式執行過程中避免使用反射
    • 反射是Java提供給使用者一個很強大的功能,功能強大往往意味著效率不高。不建議在程式執行過程中使用尤其是頻繁使用反射機制,特別是Method的invoke方法,如果確實有必要,一種建議性的做法是將那些需要通過反射載入的類在專案啟動的時候通過反射例項化出一個物件並放入記憶體,使用者只關心和對端互動的時候獲取最快的響應速度,並不關心對端的專案啟動花多久時間。

















沒有留言:

張貼留言

test2