Effective Java 學習筆記 (7)

Finalizer 不可計劃的,也是危險的,一般也是不必要的.

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

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

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

顯示的調用的終止函數可以採用try -finally的語句

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

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

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

要注意,finallizer沒有承繼關係,在子類中必須顯示調用父類中的函數.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章