java中的finalize方法是Object類別中提供的一個方法,在GC準備釋放物件所佔用的記憶體空間之前,它將首先呼叫finalize()方法。
finalize()方法是Object類別中提供的一個方法,在GC準備釋放物件所佔用的記憶體空間之前,它將首先呼叫finalize()方法。其在Object中定義如下:
protected void finalize() throws Throwable { }
1 finalize()呼叫的時機
與C 的析構函數(對象在清除之前析構函數會被呼叫)不同,在Java中,由於GC的自動回收機制,因而並不能保證finalize方法會被及時地執行(垃圾對象的回收時機具有不確定性),也不能保證它們會被執行(程序由始至終都未觸發垃圾回收)。
public class Finalizer { @Override protected void finalize() throws Throwable { System.out.println("Finalizer-->finalize()"); } public static void main(String[] args) { Finalizer f = new Finalizer(); f = null; } } //无输出
public class Finalizer { @Override protected void finalize() throws Throwable { System.out.println("Finalizer-->finalize()"); } public static void main(String[] args) { Finalizer f = new Finalizer(); f = null; System.gc();//手动请求gc } } //输出 Finalizer-->finalize()
##2 什麼時候應該使用它
##finalize()方法中一般用於釋放非資源(如開啟的檔案資源、資料庫連線等),或是呼叫非Java方法(native方法)時分配的記憶體(例如C語言的malloc()系列函數)。首先,由於finalize()方法的呼叫時機具有不確定性,從一個物件變得不可到達開始,到finalize()方法被執行,所花費的時間這段時間是任意長的。我們並不能依賴finalize()方法能及時的回收佔用的資源,可能出現的情況是在我們耗盡資源之前,gc卻仍未觸發,因而通常的做法是提供顯示的close()方法供客戶端手動調用。
另外,重寫finalize()方法意味著延長了回收物件時需要進行更多的操作,從而延長了物件回收的時間。利用finalize()方法最多只會被呼叫一次的特性,我們可以實現延長物件的生命週期。
class User{ public static User user = null; @Override protected void finalize() throws Throwable { System.out.println("User-->finalize()"); user = this; } } public class FinalizerTest { public static void main(String[] args) throws InterruptedException { User user = new User(); user = null; System.gc(); Thread.sleep(1000); user = User.user; System.out.println(user != null);//true user = null; System.gc(); Thread.sleep(1000); System.out.println(user != null);//false } }
推薦教學: 《
java教學以上是java中的finalize方法有什麼作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具