成熟的C++程序員對內(nèi)存的使用一般都是比較嚴(yán)謹(jǐn)?shù)?,?gòu)造方法和析構(gòu)方法是伴隨著對象的生成和銷毀的。 設(shè)為首頁 不再使用的內(nèi)存都要及時釋放。所以析構(gòu)方法中最常見的操作是回收分配給對象的存儲空間。那么對于Java初學(xué)者來說,往往有人要問,同樣是OOP的語言,又與C++有著很大相似性的Java,如何做到這一工作呢?
Java不支持析構(gòu)器。Java有自動的垃圾回收器,不需要人工回收內(nèi)存。
那么有人要問我了,你這里介紹finalize到底和內(nèi)存回收有什么聯(lián)系呢?
finalize為Object類的成員方法,所以任何一個類都可以重寫該方法,finalize方法將在垃圾回收器清除對象之前被調(diào)用。但實(shí)際上,不要使用finalize方法回收任何短缺的資源,因?yàn)榈降缀螘rfinalize方法才能被真正調(diào)用很難知道。
JavaAPI中有這樣的敘述。
finalize 的常規(guī)協(xié)定是:當(dāng) Java虛擬機(jī)已確定尚未終止的任何線程無法再通過任何方法訪問此對象時,將調(diào)用此方法,除非由于準(zhǔn)備終止的其他某個對象或類的終結(jié)操作執(zhí)行了某個操作。
Java不支持析構(gòu)器。Java有自動的垃圾回收器,不需要人工回收內(nèi)存。
那么有人要問我了,你這里介紹finalize到底和內(nèi)存回收有什么聯(lián)系呢?
finalize為Object類的成員方法,所以任何一個類都可以重寫該方法,finalize方法將在垃圾回收器清除對象之前被調(diào)用。但實(shí)際上,不要使用finalize方法回收任何短缺的資源,因?yàn)榈降缀螘rfinalize方法才能被真正調(diào)用很難知道。
JavaAPI中有這樣的敘述。
finalize 的常規(guī)協(xié)定是:當(dāng) Java虛擬機(jī)已確定尚未終止的任何線程無法再通過任何方法訪問此對象時,將調(diào)用此方法,除非由于準(zhǔn)備終止的其他某個對象或類的終結(jié)操作執(zhí)行了某個操作。

