Effective Java 學習筆記 7

2021-05-21 15:39:48 字數 471 閱讀 8074

finalizer 不可計畫的,也是危險的,一般也是不必要的.

不能在finalizer中放任何與依賴時間相關的操作,因為你不知道它什麼時候被執行. 比如在finalizer中關閉檔案的做法就是錯誤的, 根據jvm的實現方式不同,有可能導致開啟的檔案數過多而無法再開啟檔案.

也不能在finalizer中改變狀態,如給資料庫解鎖等.

finalizer還能帶來嚴重的效能問題,

顯示的呼叫的終止函式可以採用try -finally的語句

當然,合法的使用finalizer有兩種情況:

一種是做為最後的一道關卡,檢測使用者是否有沒有被釋放的資源,如果有則釋放它,並列印出警告. 雖然不提倡在finalizer中釋放資源,但晚釋放總比不釋放好(beter later than never)

還一種合法使用就是在使用 native方法的時候.

要注意,finallizer沒有承繼關係,在子類中必須顯示呼叫父類中的函式.

Effective Java 學習筆記 6

及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...

Effective Java 學習筆記(5)

盡量復用物件,而不是建立新的物件,特別是當乙個物件是immutable 不可改變 的時候。如string物件,string s new string string 千萬不要這樣做,因為這裡實際上建立了兩個物件。要避免出現這樣的情況,1是可以用靜態工廠函式,來解決,如類庫中的boolean.value...

Effective Java 學習筆記 6

及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...