學(xué)習(xí)筆記《垃圾回收算法》

一蟋定、垃圾回收算法

1张弛、引用計(jì)數(shù)法

引用計(jì)數(shù)法的實(shí)現(xiàn)非常簡(jiǎn)單,只需要為每個(gè)對(duì)象配備一個(gè)計(jì)數(shù)器即可财破。但是存在一個(gè)嚴(yán)重的問(wèn)題就是不能解決循環(huán)應(yīng)用的問(wèn)題掰派。因此在java的垃圾回收器中,沒(méi)有使用這種算法左痢。

2靡羡、標(biāo)記清除算法

標(biāo)記清楚算法是現(xiàn)在垃圾回收算法的思想基礎(chǔ)。標(biāo)記清除算法將垃圾回收分為兩個(gè)階段:標(biāo)記和清除階段俊性。

在標(biāo)記階段略步,首先通過(guò)根節(jié)點(diǎn),標(biāo)記所有從根節(jié)點(diǎn)開(kāi)始的可達(dá)對(duì)象定页。因此未被標(biāo)記的對(duì)象就是未被引用的垃圾對(duì)象趟薄。然后在清除階段,清除未被標(biāo)記的對(duì)象典徊。標(biāo)記清楚算法可能產(chǎn)生最大的問(wèn)題就是空間碎片杭煎。

3、復(fù)制算法

與標(biāo)記清除算法相比卒落,復(fù)制算法是一種相對(duì)高效的回收方法羡铲。它的核心思想是:將原有的內(nèi)存空間分為兩塊,每次只使用其中一塊儡毕,在垃圾回收時(shí)也切,將正在使用的內(nèi)存塊中的存活對(duì)象復(fù)制到未使用的內(nèi)存塊中,之后,清除正在使用的內(nèi)存塊中的所有對(duì)象雷恃,交換兩個(gè)內(nèi)存的角色疆股,完成垃圾回收。

如果系統(tǒng)中的垃圾對(duì)象很多倒槐,復(fù)制算法需要復(fù)制的存活對(duì)象數(shù)量并不會(huì)太大旬痹。因此在真正需要垃圾回收的時(shí)刻,復(fù)制算法的效率是很高的讨越。又由于對(duì)象是再垃圾回收過(guò)程中統(tǒng)一被復(fù)制到新的內(nèi)存空間中唱凯,因此,可確被蚜。回收后的內(nèi)存空間是沒(méi)有碎片的。雖然有以上兩大優(yōu)點(diǎn)卷雕,但是復(fù)制算法的代價(jià)缺點(diǎn)是將系統(tǒng)內(nèi)存折半节猿,因此,單純的復(fù)制算法也很難讓人接受漫雕。

在java的新生代串行垃圾回收器中滨嘱,使用的復(fù)制算法思想。

在垃圾回收時(shí)浸间,Eden空間的存活對(duì)象會(huì)被復(fù)制到未使用的survivor空間中(假設(shè)是to)太雨,正在使用的survivor空間(假設(shè)是from)中的年輕對(duì)象也會(huì)被復(fù)制to空間中(大對(duì)象或者老年對(duì)象直接回進(jìn)入老年代,如果to空間已滿魁蒜,則對(duì)象也會(huì)直接進(jìn)入老年代)此時(shí)Eden空間和from空間中的剩余對(duì)象就是垃圾對(duì)象囊扳,可以直接清空,to空間則存放此次回收的存活對(duì)象兜看。

4锥咸、標(biāo)記-壓縮算法

復(fù)制算法的高效性是建立在存活對(duì)象少,垃圾對(duì)象多的前提下的细移。這種情況在年輕代經(jīng)常發(fā)生搏予,但是在老年代,更常見(jiàn)的情況大部分對(duì)象都是存活對(duì)象弧轧。如果依然使用復(fù)制算法雪侥,由于存活對(duì)象較多,復(fù)制的成本也將很高精绎。因此速缨,基于老年代垃圾回收的特性,需要使用新的算法捺典。標(biāo)記壓縮算法是一種老年代的回收算法鸟廓,它在標(biāo)記清除的算法的基礎(chǔ)上做了一些優(yōu)化,標(biāo)記壓縮算法也需要從根節(jié)點(diǎn)開(kāi)始,對(duì)所有可達(dá)對(duì)象做一次標(biāo)記引谜。但之后牍陌,并不是清理未標(biāo)記的對(duì)象,而是將所有的存活對(duì)象壓縮到內(nèi)存的一端员咽。之后毒涧,清理邊界的所有空間。這種方法即避免了碎片的產(chǎn)生贝室,又不需要兩塊相同的內(nèi)存空間契讲,因此性價(jià)比較高。

5滑频、增量算法

對(duì)大部分的垃圾回收算法而言捡偏,在垃圾回收的過(guò)程中,應(yīng)用軟件將處于一種Stop the World的狀態(tài)峡迷。在Stop the World 的狀態(tài)下银伟,應(yīng)用程序的所有線程都會(huì)被掛起,暫停一切正常的工作绘搞,等待垃圾回收完成彤避。如果垃圾回收時(shí)間很長(zhǎng),應(yīng)用程序就會(huì)掛起很久夯辖,將會(huì)嚴(yán)重影響用戶體驗(yàn)或者系統(tǒng)的穩(wěn)定性琉预。

增量算法的基本思想是,如果一次將所有的垃圾進(jìn)行處理蒿褂,需要造成系統(tǒng)的長(zhǎng)時(shí)間停頓圆米,那么久可以讓垃圾收集的線程和應(yīng)用程序線程交替執(zhí)行。每次垃圾收集只收集一小片區(qū)域贮缅,接著切換到應(yīng)用線程榨咐。可以減少系統(tǒng)的停頓時(shí)間谴供。但是块茁,因?yàn)榫€程的切換和上下文轉(zhuǎn)換的消耗,會(huì)使得垃圾回收的成本上升桂肌,造成吞吐量的下降数焊。

6、分代

以Hot Spot為例崎场,新生代用復(fù)制算法佩耳,老年代用標(biāo)記壓縮算法。

二谭跨、垃圾收集器的類型

按線程分干厚,可以分為串行垃圾回收器和并行垃圾回收器李滴。串行垃圾回收器一次只使用一個(gè)線程進(jìn)行垃圾回收;并行垃圾回收器一次將開(kāi)啟多個(gè)線程同時(shí)進(jìn)行垃圾回收蛮瞄。在并行能力較強(qiáng)的CPU上使用并行垃圾回收器可以縮短GC的停頓時(shí)間所坯。


按照工作模式分,可以分為并發(fā)式垃圾回收器和獨(dú)占式垃圾回收器挂捅。并發(fā)式垃圾回收器與應(yīng)用程序線程交替工作芹助,以盡可能的減少應(yīng)用程序的停頓時(shí)間;獨(dú)占式垃圾回收器(Stop the World)一旦運(yùn)行闲先,就停止應(yīng)用程序中的其他線程状土,直到垃圾回收過(guò)程完全結(jié)束。


按照碎片處理方式伺糠,可分為壓縮式垃圾回收和非壓縮式垃圾回收器蒙谓。壓縮式垃圾回收器會(huì)在回收完成后,對(duì)存活的對(duì)象進(jìn)行壓縮整理训桶,消除回收后的碎片彼乌;非壓縮式的垃圾回收器,不進(jìn)行這不操作渊迁。


按工作的內(nèi)存區(qū)間,又可分為新生代垃圾回收器和老年代垃圾回收器灶挟。顧名思義琉朽,新生代垃圾回收器只在新生代工作;老年代垃圾回收器則工作在老年代稚铣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末箱叁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惕医,更是在濱河造成了極大的恐慌耕漱,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抬伺,死亡現(xiàn)場(chǎng)離奇詭異螟够,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)峡钓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)妓笙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人能岩,你說(shuō)我怎么就攤上這事寞宫。” “怎么了拉鹃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵辈赋,是天一觀的道長(zhǎng)鲫忍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钥屈,這世上最難降的妖魔是什么悟民? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮焕蹄,結(jié)果婚禮上逾雄,老公的妹妹穿的比我還像新娘。我一直安慰自己腻脏,他們只是感情好鸦泳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著永品,像睡著了一般做鹰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼎姐,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天钾麸,我揣著相機(jī)與錄音,去河邊找鬼炕桨。 笑死饭尝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的献宫。 我是一名探鬼主播钥平,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姊途!你這毒婦竟也來(lái)了涉瘾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捷兰,失蹤者是張志新(化名)和其女友劉穎立叛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贡茅,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秘蛇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顶考。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤叉。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖村怪,靈堂內(nèi)的尸體忽然破棺而出秽浇,到底是詐尸還是另有隱情,我是刑警寧澤甚负,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布柬焕,位于F島的核電站审残,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斑举。R本人自食惡果不足惜搅轿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望富玷。 院中可真熱鬧璧坟,春花似錦、人聲如沸赎懦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)励两。三九已至黎茎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間当悔,已是汗流浹背傅瞻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盲憎,地道東北人嗅骄。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像饼疙,于是被迫代替她去往敵國(guó)和親掸读。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容