1. 程式人生 > >Object類的方法——finalize()

Object類的方法——finalize()

Java中存在垃圾回收器負責回收無用物件佔用的記憶體資源,其實垃圾回收器只會回收由new關鍵字分配的記憶體空間,對於一些通過其他途徑(比如反射)建立物件而分配的記憶體空間垃圾回收器並不能進行回收。為了應對這種情況,允許在類中定義一個finalize方法,其基本原理是:如果垃圾回收器準備對某物件佔用的記憶體資源進行回收,會先將該物件放入回收佇列,處於回收佇列中的物件會執行其finalize()方法,做一些清除前的工作,例如資源釋放等;直至下一次垃圾回收動作發生時才會真正回收物件佔用的記憶體空間
但這並不意味著我們在程式設計時把應該finalize()方法作為類似於“解構函式”使用。因為該方法只會在垃圾回收時才會執行,而物件可能是不被垃圾回收的

。所以如果我們想在不再需要某物件前做一些事情,必須自己手動去做。由於物件在被回收時會呼叫該方法,所以我們可以在該方法中對某種情況進行判斷,例如開啟的檔案物件是否關閉關閉等,但還是不建議過多的使用該方法。我們應該記住以下幾點:

1、物件可能不被垃圾回收;
2、垃圾回收不等於“析構”;
3、垃圾回收只與記憶體有關;
4、垃圾回收的本質是在後臺起一個執行緒進行回收,這是需要消耗資源的;所以如果JVM並未面臨記憶體耗盡的情形,是不會浪費時間去執行垃圾回收回收記憶體空間的。