真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中finalize的作用是什么

java中finalize的作用是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括鞏留網(wǎng)站建設(shè)、鞏留網(wǎng)站制作、鞏留網(wǎng)頁制作以及鞏留網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鞏留網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鞏留省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時(shí)對這個對象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前被自動調(diào)用的。

finalize()方法是Object類中提供的一個方法,在GC準(zhǔn)備釋放對象所占用的內(nèi)存空間之前,它將首先調(diào)用finalize()方法。其在Object中定義如下:

protected void finalize() throws Throwable { }

1 finalize()調(diào)用的時(shí)機(jī)

與C++的析構(gòu)函數(shù)(對象在清除之前析構(gòu)函數(shù)會被調(diào)用)不同,在Java中,由于GC的自動回收機(jī)制,因而并不能保證finalize方法會被及時(shí)地執(zhí)行(垃圾對象的回收時(shí)機(jī)具有不確定性),也不能保證它們會被執(zhí)行(程序由始至終都未觸發(fā)垃圾回收)。

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 什么時(shí)候應(yīng)該使用它

finalize()方法中一般用于釋放非資源(如打開的文件資源、數(shù)據(jù)庫連接等),或是調(diào)用非Java方法(native方法)時(shí)分配的內(nèi)存(比如C語言的malloc()系列函數(shù))。

3 為什么應(yīng)該避免使用它

首先,由于finalize()方法的調(diào)用時(shí)機(jī)具有不確定性,從一個對象變得不可到達(dá)開始,到finalize()方法被執(zhí)行,所花費(fèi)的時(shí)間這段時(shí)間是任意長的。我們并不能依賴finalize()方法能及時(shí)的回收占用的資源,可能出現(xiàn)的情況是在我們耗盡資源之前,gc卻仍未觸發(fā),因而通常的做法是提供顯示的close()方法供客戶端手動調(diào)用。
另外,重寫finalize()方法意味著延長了回收對象時(shí)需要進(jìn)行更多的操作,從而延長了對象回收的時(shí)間。

4 讓對象再活一次

利用finalize()方法最多只會被調(diào)用一次的特性,我們可以實(shí)現(xiàn)延長對象的生命周期。

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
	}
}

注意:

垃圾回收過程中執(zhí)行終結(jié)器的準(zhǔn)確時(shí)間是不確定的。不保證資源在任何特定的時(shí)間都能釋放,除非調(diào)用 Close 方法或 Dispose方法。

即使一個對象引用另一個對象,也不能保證兩個對象的終結(jié)器以任何特定的順序運(yùn)行。即,如果對象 A 具有對對象 B 的引用,并且兩者都有終結(jié)器,則當(dāng)對象 A 的終結(jié)器啟動時(shí),對象 B 可能已經(jīng)終結(jié)了。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


文章名稱:java中finalize的作用是什么
本文路徑:http://weahome.cn/article/pjsojs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部