1.不用new關鍵字創建類別的實例
用new關鍵字建立類別的實例時,建構函式鏈中的所有建構子都會自動呼叫。但如果一個物件實作了Cloneable接口,我們可以呼叫它的clone()方法。 clone()方法不會呼叫任何類別建構子。如果用Factory模式建立對象,則改用clone()方法建立新的對象實例非常簡單。
2.不要重複初始化變數
預設情況下,當呼叫類別的建構子時, Java會把變數初始化成確定的值。當一個類別從另一個類別派生時,這一點尤其應該注意,因為用new關鍵字創建一個物件時,建構函數鏈中的所有建構函數都會被自動呼叫。
3.慎用異常
異常對性能不利。拋出異常首先要建立一個新的物件。 Throwable介面的建構子呼叫名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆疊,收集呼叫追蹤資訊。只要有異常被拋出,jVM就必須調整呼叫堆疊,因為在處理過程中建立了一個新的物件。異常只能用於錯誤處理,不應該用來控製程式流程。
要注意以下兩點。 (1) 避免對應用程式的邏輯使用try/catch,如果可以用if,while等邏輯語句來處理,那麼就盡可能的不用try/catch語句;(2) 重用異常在必須要進行異常的處理時,要盡可能的重複使用已經存在的異常物件。因為在異常的處理中,產生一個異常物件要消耗掉大部分的時間。
4. 執行緒
線程能充分利用系統的資源。當其他執行緒因為等待硬碟或網路讀寫時,程式能繼續處理和運作。但是對線程運用不當,也會影響程式的效能。例:正確使用Vector類別。 Vector主要用來保存各種類型的物件(包括相同類型和不同類型的物件)。 Vector提供了執行緒的安全保護功能。即使Vector類別中的許多方法同步。但是如果你已經確認你的應用程式是單線程,這些方法的同步就完全不必要了。另外在Vector尋找儲存的各種物件時,常常要花很多的時間進行類型的配對。而當這些物件都是同一類型時,這些配對就完全不必要了。因此,有必要設計一個單線程的,保存特定類型物件的類別或集合來取代Vector類別.
關於線程的操作,要注意:(1) 防止過多的同步,如果程式是單線程,則一定不要使用同步。 (2) 同步方法而不要同步整個程式碼段,對某個方法進行同步比對整個程式碼段進行同步的效能要好。
5.盡量使用局部變數
呼叫方法時傳遞的參數以及在呼叫中建立的臨時變數都保存在堆疊(Stack)中,速度較快。
6.盡可能的使用靜態變數
讓所有的實例都共享這個變數。
7.盡量指定類別的final修飾符
帶有final修飾符的類別是不可派生的。 java.lang.String,為String類別指定final防止了人們覆寫length()方法。另外,如果指定一個類別為final,則該類別所有的方法都是final。 Java編譯器會尋找機會內聯(inline)所有的final方法,此舉能夠使效能平均提高50%。
8.物件的生成和分配給它合理的空間和大小
JAVA程式設計中常常會產生大量的物件(或實例)。由於系統不僅要花時間產生對象,以後可能還要花時間對這些對象進行垃圾回收和處理。因此,產生過多的物件將會為程式的效能帶來很大的影響;另外JAVA中的許多類別都有它的預設的空間分配大小。對於StringBuffer類別來講,預設的分配空間大小是16個字元。如果在程式中使用StringBuffer的空間大小不是16個字符,那麼就必須進行正確的初始化。
9.使用非阻塞I/O
版本較低的JDK不支援非阻塞I/O API。為避免I/O阻塞,有些應用採用了創建大量執行緒的辦法(在較好的情況下,會使用一個緩衝池)。這種技術可以在許多必須支援並發I/O流的應用中見到,如Web伺服器。 JDK 1.4引入了非阻塞的I/O函式庫(java.nio)。
本文出自CSDN博客,轉載請標示出處: http://blog.csdn.net/Foxalien/archive/2009/12/18/5029659.aspx