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