|
此時(shí),大家可能已相信了自己應(yīng)該將finalize()作為一種常規(guī)用途的清除方法使用。它有什么好處呢?
要記住的第三個(gè)重點(diǎn)是:
垃圾收集只跟內(nèi)存有關(guān)!
也就是說,垃圾收集器存在的唯一原因是為了回收程序不再使用的內(nèi)存。所以對于與垃圾收集有關(guān)的任何活
動(dòng)來說,其中最值得注意的是finalize()方法,它們也必須同內(nèi)存以及它的回收有關(guān)。
但這是否意味著假如對象包含了其他對象,finalize()就應(yīng)該明確釋放那些對象呢?答案是否定的——垃圾
收集器會負(fù)責(zé)釋放所有對象占據(jù)的內(nèi)存,無論這些對象是如何創(chuàng)建的。它將對finalize()的需求限制到特殊
的情況。在這種情況下,我們的對象可采用與創(chuàng)建對象時(shí)不同的方法分配一些存儲空間。但大家或許會注意
到,Java 中的所有東西都是對象,所以這到底是怎么一回事呢?
之所以要使用finalize(),看起來似乎是由于有時(shí)需要采取與Java 的普通方法不同的一種方法,通過分配
內(nèi)存來做一些具有C 風(fēng)格的事情。這主要可以通過“固有方法”來進(jìn)行,它是從Java 里調(diào)用非Java 方法的
一種方式(固有方法的問題在附錄A 討論)。C 和C++是目前唯一獲得固有方法支持的語言。但由于它們能調(diào)
用通過其他語言編寫的子程序,所以能夠有效地調(diào)用任何東西。在非Java 代碼內(nèi)部,也許能調(diào)用C 的
malloc()系列函數(shù),用它分配存儲空間。而且除非調(diào)用了free(),否則存儲空間不會得到釋放,從而造成內(nèi)
存“漏洞”的出現(xiàn)。當(dāng)然,free()是一個(gè)C 和C++函數(shù),所以我們需要在finalize()內(nèi)部的一個(gè)固有方法中 電腦技術(shù)www.boydavid.com
調(diào)用它。
讀完上述文字后,大家或許已弄清楚了自己不必過多地使用finalize()。這個(gè)思想是正確的;它并不是進(jìn)行
普通清除工作的理想場所。那么,普通的清除工作應(yīng)在何處進(jìn)行呢? 本文出自:億恩科技【www.xuefeilisp.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|