1. 對於明確不需要派生的類,添加final修飾符,此時該類的所有方法都是final的。Java編譯器會尋找機會內聯(inline)所有的final方法。(能使效能提升50%)
2. 盡量重用對象,避免產生過多的對象。對於String的串連,用StringBuffer代替。
3. 盡量少用全域變數如static等(heap中建立,慢),多用局部變數(Stack中建立,快)。
4. 不要重複初始設定變數。預設情況下,調用類的建構函式時, Java會把變數初始化成確定的值:所有的對象被設定成null,整數變數(byte、short、int、long)設定成0,float和 double變數設定成0.0,邏輯值設定成false。當一個類從另一個類派生時,這一點尤其應該注意,因為用new關鍵詞建立一個對象時,建構函式鏈中的所有建構函式都會被自動調用。即
class test{
private Object obj; //不需要寫成 private Object obj=null;
}
5. 在java+Oracle的應用系統開發中,java中內嵌的SQL語言應盡量使用大寫形式,以減少Oracle解析器的解析負擔。
6. java編程過程中,進行資料庫連接,I/O流操作,在使用完畢後,及時關閉以釋放資源。因為對這些大對象的操作會造成系統大的開銷。
7. 過分的建立對象會消耗系統的大量記憶體,嚴重時,會導致記憶體流失,因此,保證到期的對象的及時回收具有重要意義。
JVM的GC並非十分智能,因此建議在對象使用完畢後,手動設定成null。
8. 在使用同步機制時,盡量使用同步方法代替代碼同步快。
9. 盡量減少對變數的重複計算。
例如:
for(int i=0; i<list.size(); i++)
應替換為:
for(int i=0, int len=list.size(); i< len; i++)
10. 需要時才建立變數或者對象。
例如:
String str=”hello”;
if(i==1){
list.add(str);
}
應替換為
if(i==1){
String str=”hello”;
list.add(str);
}
11. 慎用異常
異常對效能不利。拋出異常首先要建立一個新的對象。Throwable介面的建構函式調用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤資訊。只要有異常被拋出,VM就必須調整呼叫堆疊,因為在處理過程中建立了一個新的對象。
異常只能用於錯誤處理,不應該用來控製程序流程。
12. 不要在迴圈中使用Try/Catch語句,若需要,應該放在最外層。
13. 若一個類實現了Cloneable,調用clone()方法建立類的執行個體。因為用new建立時,建構函式鏈中的所有建構函式都會被自動調用。
14. 乘法和除法
考慮下面的代碼:
for (val = 0; val < 100000; val +=5) {
alterX = val * 8; myResult = val * 2;
}
用移位操作替代乘法操作可以極大地提高效能。下面是修改後的代 碼:
for (val = 0; val < 100000; val += 5) {
alterX = val << 3; myResult = val << 1;
}
修改後的代碼不再做乘以8的操作,而是改用等價的左移3位操作,每左移1位相當於乘以2。相應地,右移1位操作相當於除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難於理解,所以最好加上一些注釋。
15. 盡量使用HashMap和ArrayList;除非必要,否則不推薦使用HashTable和Vector,後者由於同步機制導致了效能的開銷。
16. 知道長度的情況下盡量使用定長數組array。
17. 當複製大量資料時,使用System.arraycopy()命令。