欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

golang垃圾回收中如何實(shí)現(xiàn)刪除寫屏障

這篇文章將為大家詳細(xì)講解有關(guān)golang垃圾回收中如何實(shí)現(xiàn)刪除寫屏障,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)公司成立于2013年,公司以網(wǎng)站設(shè)計(jì)、做網(wǎng)站、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上千多家,涉及國內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

首先聲明,golang 沒有直接實(shí)現(xiàn)過刪除寫屏障,golang 的內(nèi)存寫屏障是由插入寫屏障到混合寫屏障過渡的。不過,雖然 golang 從來沒有直接使用刪除寫屏障,但是混合寫屏障卻用到了刪除寫屏障的思路。

刪除寫屏障:也叫做基于其實(shí)快照的解決方案(snapshot-at-the-begining)。顧名思義,就是在開始 gc 之前,必須 STW ,對(duì)整個(gè)根做一次起始快照。當(dāng)賦值器(業(yè)務(wù)線程)從灰色或者白色對(duì)象中刪除白色指針時(shí)候,寫屏障會(huì)捕捉這一行為,將這一行為通知給回收器。這樣,基于起始快照的解決方案保守地將其目標(biāo)對(duì)象當(dāng)作存活的對(duì)象,這樣就絕對(duì)不會(huì)有被誤回收的對(duì)象,但是有掃描工作量浮動(dòng)放大的風(fēng)險(xiǎn)。術(shù)語叫做追蹤波面的回退。

刪除寫屏障(基于起始快照的寫屏障)有一個(gè)前提條件,就是起始的時(shí)候,把整個(gè)根部掃描一遍,讓所有的可達(dá)對(duì)象全都在灰色保護(hù)下(根黑,下一級(jí)在堆上的全灰),之后利用刪除寫屏障捕捉內(nèi)存寫操作,確保弱三色不變式不被破壞,就可以保證垃圾回收的正確性。

偽代碼如下:

atomic Write(src, i, ref)    shade(src[i])    src[i] <- ref
 

復(fù)習(xí)一下一些概念

賦值器的顏色

  • 灰色賦值器:如果某一個(gè)賦值器尚未被回收器掃描過(即賦值器的根還沒有被追蹤到),或者盡管被掃描過,但是還需要重新掃描
    • golang 插入寫屏障的時(shí)期,就是灰色賦值器
  • 黑色賦值器:已經(jīng)被回收器掃描過,不會(huì)再對(duì)其進(jìn)行掃描

插入寫屏障對(duì)應(yīng)的是灰色賦值器,刪除寫屏障對(duì)應(yīng)的是黑色賦值器。

三色不變式

  • 強(qiáng)三色:不允許黑色對(duì)象指向白色對(duì)象
  • 弱三色:允許黑色對(duì)象指向白色對(duì)象,但必須保證一個(gè)前提,這個(gè)白色對(duì)象必須處于灰色對(duì)象的保護(hù)下

強(qiáng)三色不變式的框架下:要求黑色賦值器的根只能引用灰色或者黑色對(duì)象,不能引用白色對(duì)象(因?yàn)楹谏x值器不再被掃描,引用白色)。

弱三色不變式的框架下:允許黑色賦值器的根引用白色對(duì)象,但前提是白色對(duì)象必須處于灰色保護(hù)下。

獲取賦值器的快照,意味著回收器需要掃描其根并將其置為黑色。我們必須在回收起始階段完成賦值器快照的獲取,并保證其不持有任何白色對(duì)象。否則一旦賦值器持有某白色對(duì)象的唯一引用并將其寫入黑色對(duì)象,然后再拋棄該指針,則會(huì)違背弱三色不變式的要求。當(dāng)然,為黑色對(duì)象增加寫屏障可以捕捉這一內(nèi)存寫操作,但如此一來,該方案將退化到強(qiáng)三色不變式的框架下。因此,基于其實(shí)快照的解決方案將只允許黑色賦值器的存在。

刪除寫屏障怎么保證弱三色不變式,如下示意圖:

golang垃圾回收中如何實(shí)現(xiàn)刪除寫屏障
 

 

我們看到第三張圖顯示,黑色指向白色沒問題,只要最后 delete 指針的時(shí)候 Z 對(duì)象置灰色,那么回收的正確性就可以保證。

關(guān)于“golang垃圾回收中如何實(shí)現(xiàn)刪除寫屏障”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

當(dāng)前標(biāo)題:golang垃圾回收中如何實(shí)現(xiàn)刪除寫屏障
本文鏈接:http://www.chinadenli.net/article40/gspseo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷關(guān)鍵詞優(yōu)化網(wǎng)站維護(hù)軟件開發(fā)網(wǎng)站收錄服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)