一吃沪、引用計(jì)數(shù)(Reference Counting)算法
Internet Explorer 8以下的DOM和BOM使用COM組件所以是引用計(jì)數(shù)來為DOM對(duì)象處理內(nèi)存嫉鲸,引用計(jì)數(shù)的含義是跟蹤記錄每個(gè)值被引用的次數(shù)摊崭。形象點(diǎn)說:
1)有很多便簽紙操骡,這些紙就好比是內(nèi)存。
2)使用內(nèi)存钻弄,就好比在這些紙上寫字。但是者吁,有個(gè)條件窘俺,任何使用一張紙的人,必須在紙的一角寫上計(jì)數(shù)1复凳,如果2個(gè)人同時(shí)使用一張紙瘤泪,那么計(jì)數(shù)就變成2,以此類推育八。當(dāng)一個(gè)人使用完某張紙的時(shí)候对途,必須把角上的計(jì)數(shù)減1,這樣髓棋,一旦當(dāng)計(jì)數(shù)變?yōu)?实檀,就滿足了垃圾回收條件惶洲,等在一旁的機(jī)器人會(huì)立即把這張紙扔進(jìn)垃圾箱。
但這個(gè)算法存在一個(gè)缺陷膳犹,就是一旦產(chǎn)生循環(huán)引用恬吕,內(nèi)存就會(huì)被泄露愧哟。
二遣臼、標(biāo)記-清除(Mark-Sweep)算法
當(dāng)變量進(jìn)入執(zhí)行環(huán)境的時(shí)候,比如函數(shù)中聲明一個(gè)變量突那,垃圾回收器將其標(biāo)記為“進(jìn)入環(huán)境”侨颈,當(dāng)變量離開環(huán)境的時(shí)候(函數(shù)執(zhí)行結(jié)束)將其標(biāo)記為“離開環(huán)境”余赢。形象點(diǎn)說:
1)領(lǐng)導(dǎo)發(fā)給職員們一些便簽紙,隨便用哈垢,不需要做什么記號(hào)妻柒。
2)用到某個(gè)時(shí)候,領(lǐng)導(dǎo)命令所有人停下來耘分,這時(shí)举塔,每個(gè)人將自己仍然需要使用的白紙上做一個(gè)記號(hào)。
3)最后領(lǐng)導(dǎo)會(huì)把那些沒有記號(hào)的白紙全部扔進(jìn)垃圾箱求泰。
4)這個(gè)算法的缺陷也很明顯央渣,首先是效率問題,為了標(biāo)記渴频,必須暫停程序芽丹,長(zhǎng)時(shí)間進(jìn)行等待。
其次卜朗,標(biāo)記清除算法會(huì)造成內(nèi)存碎片拔第,比如被標(biāo)記清除的只是一些很小的內(nèi)存塊,而我們接下來要申請(qǐng)的都是一些大塊的內(nèi)存场钉,那么剛才清除掉的內(nèi)存蚊俺,其實(shí)還是無法使用。
三逛万、復(fù)制(copying)算法
mark-sweep算法效率低下泳猬,由此,又產(chǎn)生了一種新的算法宇植。
1)把全部便簽紙分成兩份
2)所有人都在左邊得封,便簽紙隨便用,當(dāng)領(lǐng)導(dǎo)說停下來当纱,這次不做記號(hào)呛每,只要帶著還需要的便簽紙轉(zhuǎn)移到右邊去就可以。
3)那些沒用的紙自然就剩了下來坡氯,然后把這些紙扔到垃圾箱中晨横,下次執(zhí)行垃圾回收的時(shí)候采用同樣的方式洋腮,只不過這次從右邊向左邊遷移。
4)這種算法的效率奇高手形,可惜啥供,對(duì)內(nèi)存的消耗太大,尤其是在1960年库糠,內(nèi)存可比黃金貴多了伙狐,直接砍掉一半的內(nèi)存,顯然是無法接受的瞬欧。
轉(zhuǎn)載更改自www.cnblogs.com/strick/p/4001675.html