盡量復用物件,而不是建立新的物件,特別是當乙個物件是immutable(不可改變)的時候。
如string物件,
string s= new string(「string」); 千萬不要這樣做,因為這裡實際上建立了兩個物件。
要避免出現這樣的情況,
1是可以用靜態工廠函式,來解決,如類庫中的boolean.valueof(「true」),這種方式要優於new boolean(「true」);
2.是盡量復用物件。
看書中的例子。
public class person
}這裡,每次呼叫isbabyboomer就會建立兩個data物件,乙個calendar物件和timezone物件.
改進版:
class person
public boolean isbabyboomer()
}這個改進版把這現兩個常量作成了static,這樣,只在載入的時候建立物件,以後呼叫就不產生任何物件。
還乙個問題是要注意基本型別和物件的轉換。要注意避免寫以下的程式。以下會在加和比較的時候建立乙個long物件,這根本不是必要的。
public static void main(string args)
system.out.println(sum);
}
Effective Java 學習筆記 6
及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...
Effective Java 學習筆記 6
及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...
Effective Java 學習筆記 7
finalizer 不可計畫的,也是危險的,一般也是不必要的.不能在finalizer中放任何與依賴時間相關的操作,因為你不知道它什麼時候被執行.比如在finalizer中關閉檔案的做法就是錯誤的,根據jvm的實現方式不同,有可能導致開啟的檔案數過多而無法再開啟檔案.也不能在finalizer中改變...