1.儘可能在合適的場合使用單例
使用單例能夠減輕加載的負擔,縮短加載的時間,提升加載的效率,但並非全部地方都適用於單例,簡單來講,單例主要適用於如下三個方面
第一,控制資源的使用,經過線程同步來控制資源的併發訪問
第二,控制實例的產生,以達到節約資源的目的
第三,控制數據共享,在不創建直接關聯的條件下,讓多個不相關的進程或線程之間實現通訊
-
2.儘可能避免隨意使用靜態變量
要知道,當某個對象被定義爲stataic變量所引用,那麼gc一般是不會回收這個對象所佔有的內存,如
public class A{
static B b = new B();
}
此時靜態變量b的生命週期與A類同步,若是A類不會卸載,那麼b對象會常駐內存,直到程序終止。
-
3.儘可能避免過多過常的建立java對象
儘可能避免在常常調用的方法,循環中new對象,因爲系統不只要花費時間來建立對象,並且還要花時間對這些對象進行垃圾回收和處理,在咱們能夠控制的範圍內,最
大限度的重用對象,最好能用基本的數據類型或數組來替代對象。
-
4.儘可能使用final修飾符
帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。爲String類指定final防止了使用者覆蓋length()方法。另外,若是一個類是final的,則該類全部方法都是final的。java編譯器會尋找機會內聯(inline)全部的final方法(這和具體的編譯器實現有關)。此舉可以使性能平均提升50%。
-
5.儘可能使用局部變量
調用方法時傳遞的參數以及在調用中建立的臨時變量都保存在棧(Stack)中,速度較快。其餘變量,如靜態變量,實例變量等,都在堆(Heap)中建立,速度較慢。
6.儘可能處理好包裝類型和基本類型二者的使用場所
雖然包裝類型和基本類型在使用過程當中是能夠相互轉換,但它們二者所產生的內存區域是徹底不一樣的,基本類型數據產生和處理都在棧中處理,包裝類型是對象,是在堆中產生實例。
在集合類對象,有對象方面須要的處理適用包裝類型,其餘的處理提倡使用基本類型。
-
7.慎用synchronized,儘可能減少synchronize的方法
都知道,實現同步是要很大的系統開銷做爲代價的,甚至可能形成死鎖,因此儘可能避免無謂的同步控制。synchronize方法被調用時,直接會把當前對象鎖了,在方法執行完以前其餘線程沒法調用當前對象的其餘方法。因此synchronize的方法儘可能小,而且應儘可能使用方法同步代替代碼塊同步。
-
8.儘可能使用StringBuilder和StringBuffer進行字符串鏈接
這個就很少講了
-
9.儘可能不要使用finalize方法
實際上,將資源清理放在finalize方法中完成是很是很差的選擇,因爲GC的工做量很大,尤爲是回收Young代內存時,大都會引發應用程序暫停,因此再選擇使用finalize方法進行資源清理,會致使GC負擔更大,程序運行效率更差。
-
10.儘可能使用基本數據類型代替對象
String str = "hello";
上面這種方式會建立一個「hello」字符串,並且JVM的字符緩存池還會緩存這個字符串;
String str = new String("hello");
此時程序除建立字符串外,str所引用的String對象底層還包含一個char[]數組,這個char[]數組依次存放了h,e,l,l,o java