【學習筆記】 唐大仕—Java程序設計 第5講 深入理解Java語言之5.4 對象清除與垃圾回收
阿新 • • 發佈:2018-11-10
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 對象清除與垃圾回收