一、終結方法(finalizer):請儘可能避免使用java
- 一般是不可預測的、很危險的
- 會致使不穩定、性能降低,移植問題
- java中通常用try...catch...finally 回收非內存資源
- 終結方法不能保證 會被即時的執行
- JVM會拖延執行終結方法,不該該把寶貴資源回收交給他作
二、及時執行終結算法是垃圾回收算法主要功能,可是各個JVM實現的千差萬別算法
三、若是未被捕獲的異常,在終結過程當中拋出,異常能夠被忽略,終結過程也會結束sql
- 正常狀況下,未被捕獲異常會使線程終止,並打印出棧軌跡,終結方法中則不會
四、使用終結方法會出現嚴重性能問題安全
五、資源確實須要終止,顯式調用終止方法性能
- 典型事例:InputStream、sql.connection 的 close() 方法
- 必須在私有域內記錄下狀態,終止後再有人調用,拋 IllegalStateException
六、顯式終止一般與 try ... finally 聯合使用,確保及時終止線程
- 即使是執行過程有異常拋出,也能保證finally 會被執行

七、終結方法 好處、合法用途1:日誌
- 對象全部者,忘記顯式終止,能夠作一個安全網
- 若是終結方法發現 資源還未被釋放,可在日誌中記錄一條警告(bug存在警告)
- 固然須要視具體狀況 權衡這部分額外代碼的代價是否值得
- FileInputStream、sql.connection 都包含上述終結方法 安全網
八、合理用途2:對象
- 對象的本地對等體(native peer)
- 是一個本地對象,垃圾回收器不可能知道他
- 在不具備關鍵資源的前提下,可使用終結方法處理
- 具備關鍵資源的時候,必須顯示的釋放資源(能夠是調取本地方法釋放)
九、終結方法鏈不會自動執行內存
- 若是子類覆蓋了終結方法,必須手工調用父類終結方法
- try 塊中調用終結方法,finally 中調用父類終結方法

十、終結方法守衛者資源
- 把終結方法放在一個匿名內部類中
- 外圍私有域保持着他的惟一引用
- 因此兩者會同時啓動結束過程
- 注意:外圍類Foo並無終結方法
