1. 程式人生 > >【學習筆記】 唐大仕—Java程式設計 第5講 深入理解Java語言之5.4 物件清除與垃圾回收

【學習筆記】 唐大仕—Java程式設計 第5講 深入理解Java語言之5.4 物件清除與垃圾回收

/**
* 物件清除與垃圾回收
* @author cnRicky
* @date 2018.11.10
*/

物件清除與垃圾回收

物件清除
  • 我們知道:new建立物件
  • 那麼如何銷燬物件?
  • Java中是自動清除
    • 不需要使用delete等方法人為銷燬它
物件的自動清除
  • 垃圾回收(garbage collection)

  • 物件回收是由Java虛擬機器的垃圾回收執行緒來完成的

  • 為什麼系統知道物件是否為垃圾?

    • 任何物件都有一個引用計數器,當其值為0時,說明該物件可以回收
System.gc()方法
  • System.gc()方法
  • 它是System類的static方法
  • 它可以要求系統進行垃圾回收
  • 但它僅僅只是“建議(suggest)”
finalize()方法
  • Java中沒有“析構方法(destructor)”

  • 但Object的finalize()有類似功能

    • 系統在回收時會自動呼叫物件的finalize()方法
    • protected void finalize() throws Throwable{}
  • 子類的finalize()方法

    • 可以在子類的finalize()方法釋放系統資源
    • 一般來說,子類的finalize()方法中應該呼叫父類的finalize()方法,以保證父類的清理工作能夠正常進行
try-with-resources
  • 由於finalize()方法的呼叫時機並不確定,所以一般不用finalize()
  • 關閉開啟檔案、清除一些非記憶體資源等工作需要進行處理
  • 可以使用try-with-resources語句(JDK1.7 以上)
  • 對於實現了java.lang.AutoCloseable的物件
  • try( Scanner in = new Scanner( ... ) ){ ...... }
  • 會自動呼叫其close()方法,相當於
  • finally{ in.close(); }