復(fù)制垃圾回收算法

復(fù)制垃圾回收算法(Copying GC),是1963年由Marvin L. Minsky 研究得出的垃圾回收算法秘车,簡單的說它是通過將內(nèi)存分為兩個空間蚌卤,在垃圾回收是將空間1的活動對象末早,直接復(fù)制到空間2中啊片,然后全部回收掉空間1的對象。這里的空間1和空間2刘绣,分別被稱為來源空間目標(biāo)空間樱溉。

碰撞分配

碰撞分配算法是在復(fù)制GC中,通過碰撞或者遞增指針來跟蹤下次分配發(fā)生的地方纬凤,以便從大塊連續(xù)的內(nèi)存堆中分配相鄰的內(nèi)存段福贞。下圖就是復(fù)制GC持有的分配指針,在每次內(nèi)存分配的時候停士,它從內(nèi)存堆中返回一段內(nèi)存地址挖帘,然后再將分配指針向后移動,這樣地址空間時連續(xù)的恋技,但是因為分配的對象大小的不同拇舀,所以分配的比例并不是平均的。

這種方式的優(yōu)點是蜻底,簡單易行骄崩,運行速度快,并且因為每次分配的內(nèi)存段都是相鄰的,所以具有很好的局部引用性要拂,意思就是應(yīng)用程序如果重復(fù)訪問同一片內(nèi)存段抠璃,那么CPU可以將那片內(nèi)存段緩存起來,用以提供程序訪問的速度脱惰。

半空間算法

碰撞分配講到了復(fù)制GC如何分配鸡典,半空間算法才是真正的垃圾回收,半空間算法是在枪芒,初始內(nèi)存堆消耗殆盡時,通過GC標(biāo)識存活對象和垃圾對象(這個階段和標(biāo)記清除算法是一樣的)也就是標(biāo)記階段谁尸,在回收階段舅踪,GC將通過碰撞分配的來源空間(From-Space)中的存活的對象,全部移動到目標(biāo)空間(To-Space)中良蛮。

上圖中"M"的區(qū)域就是存活的對象抽碌,空白區(qū)域是垃圾對象底部空間就是目標(biāo)空間(To-Space)在回收階段復(fù)制GC將存活對象連續(xù)的復(fù)制到目標(biāo)空間(進(jìn)行保持局部引用性)分配指針向后移動。

我們從上圖看到存活對象已經(jīng)被全部復(fù)制到目標(biāo)空間决瞳,但是我們的內(nèi)存分配只能在來源空間進(jìn)行货徙,并且現(xiàn)在來源空間的內(nèi)存還沒有被回收掉,那么復(fù)制GC的最后一個階段就是空間交換皮胡,然后在交換完成是清空目標(biāo)空間痴颊。

半空間算法的簡單快速的優(yōu)點,同時帶來了另外一個問題屡贺,就是內(nèi)存使用的低效蠢棱,我們需要維護(hù)兩個空間相同的內(nèi)存堆來,并且僅僅有一個內(nèi)存對是當(dāng)前能夠正在被使用的甩栈,意味著要分配實際使用內(nèi)存的兩倍泻仙。

總結(jié)

我們來回顧一下復(fù)制垃圾回收算法的優(yōu)缺點

優(yōu)點

  • 高吞度量:因為僅僅需要在標(biāo)記階段消耗實際,復(fù)制階段無需太多時間量没,所以GC的時間消耗和空間中的活動對象數(shù)量成正比玉转,相比于標(biāo)記清除GC有較高的吞吐量。
  • 高速分配:與標(biāo)記清除算法使用空閑列表進(jìn)行內(nèi)存分配不同殴蹄,復(fù)制GC使用連續(xù)的內(nèi)存空間究抓,這樣就省去的使用空閑列表,分配內(nèi)存時袭灯,線性查找可分配空間的時間消耗漩蟆。
  • 局部引用緩存和空間壓縮:因為復(fù)制GC的分配是連續(xù)的,所以在可以利用局部引用緩存妓蛮,并且每次GC后內(nèi)存空間都會被集中到空間的一段怠李,也就實現(xiàn)了空間壓縮。

缺點

  • 空間效率低 復(fù)制GC需使用兩個堆空間,也就是實際空間的兩倍捺癞,這樣的內(nèi)存消耗耗是比較客觀的夷蚊。
  • 遞歸復(fù)制 因要整體的復(fù)制存活對象到目標(biāo)空間去,所以復(fù)制GC使用了遞歸方式髓介,復(fù)制存活對象的子對象惕鼓。如果遞歸層次太深還可能產(chǎn)生溢出。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唐础,一起剝皮案震驚了整個濱河市箱歧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌一膨,老刑警劉巖呀邢,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豹绪,居然都是意外死亡价淌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門瞒津,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝉衣,“玉大人,你說我怎么就攤上這事巷蚪〔≌保” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵屁柏,是天一觀的道長剪验。 經(jīng)常有香客問我,道長前联,這世上最難降的妖魔是什么功戚? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮似嗤,結(jié)果婚禮上啸臀,老公的妹妹穿的比我還像新娘。我一直安慰自己烁落,他們只是感情好乘粒,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伤塌,像睡著了一般灯萍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上每聪,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天旦棉,我揣著相機(jī)與錄音齿风,去河邊找鬼。 笑死绑洛,一個胖子當(dāng)著我的面吹牛救斑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播真屯,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼脸候,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绑蔫?” 一聲冷哼從身側(cè)響起运沦,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎配深,沒想到半個月后携添,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡凉馆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了亡资。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜共。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锥腻,靈堂內(nèi)的尸體忽然破棺而出嗦董,到底是詐尸還是另有隱情,我是刑警寧澤瘦黑,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布京革,位于F島的核電站,受9級特大地震影響幸斥,放射性物質(zhì)發(fā)生泄漏匹摇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一甲葬、第九天 我趴在偏房一處隱蔽的房頂上張望廊勃。 院中可真熱鬧,春花似錦经窖、人聲如沸坡垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冰悠。三九已至,卻和暖如春配乱,著一層夾襖步出監(jiān)牢的瞬間溉卓,已是汗流浹背皮迟。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留的诵,地道東北人万栅。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像西疤,于是被迫代替她去往敵國和親烦粒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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