許多程序設(shè)計(jì)語(yǔ)言允許在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存。分配內(nèi)存的過(guò)程因各種語(yǔ)言的語(yǔ)法不同而有所不同,但總要返回指向內(nèi)存塊開(kāi)始地址的指針。 一旦不再需要所分配的內(nèi)存(指向內(nèi)存的指針超出使用范圍),程序或運(yùn)行時(shí)環(huán)境最好將內(nèi)存釋放,避免內(nèi)存越界時(shí)得到意外結(jié)果。 在C和C++(及其他語(yǔ)言)中,由程序開(kāi)發(fā)人員負(fù)責(zé)內(nèi)存的釋放。這是個(gè)很惱人的事情,因?yàn)槌绦蜷_(kāi)發(fā)人員并不總是知道內(nèi)存應(yīng)該在何時(shí)釋放。如果不釋放內(nèi)存.那么當(dāng)系統(tǒng)中沒(méi)有內(nèi)存可用時(shí)程序會(huì)崩潰。這些程序被稱為有“內(nèi)存漏洞”。 在Java中,程序員不必親自釋放內(nèi)存,它提供了后臺(tái)系統(tǒng)級(jí)線程,記錄每次內(nèi)存分配的情況.并統(tǒng)計(jì)每個(gè)內(nèi)存指針的引用次數(shù)。在Java虛擬機(jī)運(yùn)行時(shí)環(huán)境閑置時(shí),垃圾收集線程將檢查是否存在引用次數(shù)為O的內(nèi)存指針;如果有的話,則垃圾收集線程把該內(nèi)存“標(biāo)記”為清除(“釋放”)
在JAVA程序生存期內(nèi),垃圾收集將自動(dòng)進(jìn)行,無(wú)需用戶釋放內(nèi)存,從而消除了內(nèi)存漏洞。
|