Java垃圾回收機(jī)制是Java另外一個(gè)技術(shù)優(yōu)勢,我們一般寫程序一般只是注重對(duì)象的初始化,卻忽略對(duì)象的釋放和回收。這里說的釋放其實(shí)是內(nèi)存的釋放和回收,對(duì)象釋放只是一種形象的說法,真正釋放和回收的是內(nèi)存!!!
      Java垃圾回收釋放內(nèi)存是Java運(yùn)行系統(tǒng)自己自動(dòng)完成的,不需要程序員干預(yù),程序員也無法干預(yù),負(fù)責(zé)回收的是垃圾回收器,它可以在對(duì)象不再使用時(shí),釋放并回收存儲(chǔ)該對(duì)象的那塊內(nèi)存。回收機(jī)制是一種動(dòng)態(tài)的回收機(jī)制,這是一種不定時(shí)回收機(jī)制,垃圾回收器可能在任意時(shí)間啟動(dòng),進(jìn)行垃圾回收,并不一定是產(chǎn)生垃圾才啟動(dòng),這并無規(guī)律可循。
      值得注意的是只有new出來的對(duì)象所占據(jù)的內(nèi)存才有可能被回收,而接口這種不能new出來的對(duì)象所占據(jù)的內(nèi)存是不能被回收的!!!
      最后Java虛擬機(jī)有兩種回收策略,一種是復(fù)制式回收策略,通過給正在被使用的對(duì)象復(fù)制出一塊內(nèi)存,再把空閑的那塊內(nèi)存釋放掉就可以實(shí)現(xiàn)垃圾回收,這種方式比較適合垃圾比較多的情況;另一種是自省式回收策略,通過給正在被使用的對(duì)象標(biāo)記,完成標(biāo)記后再把所有不再被使用的對(duì)象所占據(jù)的內(nèi)存一次性釋放掉,一次性釋放的時(shí)間長短根據(jù)垃圾的多少而定,所以這種方式比較適合垃圾比較少的情況。
      通常情況是在程序運(yùn)行時(shí),這兩種方式結(jié)合使用,當(dāng)垃圾比較少時(shí),就啟動(dòng)自省式回收策略,當(dāng)垃圾比較多時(shí),就啟動(dòng)復(fù)制式回收策略。