避免創(chuàng)建不必要的對象

記住一個原則:能重用對象就不要每次都創(chuàng)建一個新的對象。
例一:

String s = new String("stringette"); // 極端反例
------------------------------------------
String s = "stringette"; // 正例

字符串常量在JVM常量池中儲存。

例二:
對于同時提供了靜態(tài)工廠方法和構(gòu)造器的不可變類,通常使用靜態(tài)工廠方法而不是構(gòu)造器,以避免創(chuàng)建不必要的對象。Boolean.valueOf(String) > Boolean(String)。構(gòu)造器在每次被調(diào)用的時候都會創(chuàng)建一個新的對象。

例三:
在方法中每次都調(diào)用相同的實例。可以把該實例提出到方法外,從局部變量改為final靜態(tài)域,用一個static的代碼塊來初始化這些不會變的實例。如果這個方法被頻繁的使用,可以顯著的提升性能。

例四:
適配器(adapter),有時也叫視圖(view)。適配器是指這樣一個對象:它把功能委托給一個后備對象,從而為后備對象提供一個可以替代的接口。由于適配器除了后備對象之外,沒有其他的狀態(tài)信息,所以針對某個特定對象的特定適配器而言,它不需要創(chuàng)建多個適配器實例。例如:Map接口的keySet方法返回該Map對象的Set視圖,對于一個給定的Map對象,實際上每次返回同樣的Set實例。

例五:
Java 1.5開始,有自動裝箱。要優(yōu)先使用基本類型而不是裝箱基本類型,要當心無意識的自動裝箱。

例六:
通過維護自己的對象池來避免創(chuàng)建對象并不是一種好的做法,除非池中的對象是非常重量級的,比如數(shù)據(jù)庫連接池。建立數(shù)據(jù)庫連接的代價非常昂貴,而且數(shù)據(jù)庫的許可可能限制你只能使用一定數(shù)量的連接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容