標籤:
1. 盡量避免隨意使用靜態變數
當某個對象被定義為static的變數引用時,那麼GC通常是不會回收這個對象所佔用的記憶體
public class A {
static B b = new B(); // 靜態變數b的生命週期與A類同步, 只要A類不被卸載,那麼b對象就會常駐記憶體,直到程式終止
}
2. 處理好封裝類型和基本類型的使用場所
雖然封裝類型和基本類型在使用過程中是可以相互轉換,但它們兩者所產生的記憶體地區是完全不同的,基本類型資料產生和處理在棧中;
封裝類型是對象,在堆中產生執行個體。
3. 慎用synchronized
實現同步是要很大的系統開銷為代價,甚至可能造成死結,所以盡量避免無謂的同步控制。
4. 單線程盡量使用HashMap、ArrayList
HashTable、Vector等使用了同步機制,降低了效能。
5. 盡量減少對變數的重複計算
for(int i = 0; i < list.size(); i++) // 迴圈中,迴圈條件會被反覆計算
應該改為 for(int i = 0, len = list.size(); i < len; i++)
6. 盡量避免不必要的建立
A a = new A();
if(i == 1){ list.add(a); }
應該改為: if(i == 1){ A a = new A(); list.add(a); }
7. 盡量確定StringBuilder的容量
StringBuilder的構造器會建立一個預設大小(通常是16)的字元數組,在使用中,如果超出這個大小,就會重新分配記憶體,建立一個更大的數組,並將原先的數組複製過來,再丟棄舊的數組。在大多數情況下,你可以在建立StringBuilder的時候指定大小,這樣就避免了在容量不夠的時候自動成長,以提高效能。
8. 盡量早釋放無用對象的引用
大部分時間,方法局部引用變數所引用的對象會隨著方法結束而變成垃圾,因此,大部分時候程式無需將局部引用變數顯示地設為null;但是如果對象較大,佔用較多記憶體,不用的時候就應手動置為空白了
java程式效能最佳化