Java - finalize方法
finalize方法是當GC要回收物件前,會呼叫的方法。
GC演算法決定何時啟動GC,其機制複雜,因而finalize方法被呼叫時機無法確定,
所以一般不建議Override此方法。
另外,以下節錄連結(https://www.javaworld.com.tw/jute/post/view?bid=44&id=17264&sty=1&tpg=1&age=0)中的更新說法:
Java 9 廢棄了 finalize 方法,FileInputStream 等也清空了 finalize 方法的實作,改用 PhantomReference 的機制,JVM 有個執行緒會監控 Reference,在實例不再被參考時,呼叫 close 方法。
至於相容性的部份,若有 FileInputStream 的子類,且自定義了 close 方法,實例化時會有個 AltFinalizer 產生,AltFinalizer 建立時會包裹 FileInputStream,AltFinalizer 的作用就是等著被回收時,呼叫自定義的 finalize 方法(被加了 @SuppressWarnings("deprecation")),其中呼叫了 FileInputStream 的 close 方法。
GC演算法決定何時啟動GC,其機制複雜,因而finalize方法被呼叫時機無法確定,
所以一般不建議Override此方法。
另外,以下節錄連結(https://www.javaworld.com.tw/jute/post/view?bid=44&id=17264&sty=1&tpg=1&age=0)中的更新說法:
Java 9 廢棄了 finalize 方法,FileInputStream 等也清空了 finalize 方法的實作,改用 PhantomReference 的機制,JVM 有個執行緒會監控 Reference,在實例不再被參考時,呼叫 close 方法。
至於相容性的部份,若有 FileInputStream 的子類,且自定義了 close 方法,實例化時會有個 AltFinalizer 產生,AltFinalizer 建立時會包裹 FileInputStream,AltFinalizer 的作用就是等著被回收時,呼叫自定義的 finalize 方法(被加了 @SuppressWarnings("deprecation")),其中呼叫了 FileInputStream 的 close 方法。
留言
張貼留言