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

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

let 要求 什麽 jdk1 style 1.10 垃圾 ati 內存

/**
* 對象清除與垃圾回收
* @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(); }

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