golang的垃圾回收器介紹-創(chuàng)新互聯(lián)

GO的垃圾回收器

成都創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元湄潭做網(wǎng)站,已為上家服務(wù),為湄潭各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

go語言垃圾回收總體采用的是經(jīng)典的mark and sweep算法。

1.3版本以前,golang的垃圾回收算法都非常簡陋,然后其性能也廣被詬?。篻o runtime在一定條件下(內(nèi)存超過閾值或定期如2min),暫停所有任務(wù)的執(zhí)行,進行mark&sweep操作,操作完成后啟動所有任務(wù)的執(zhí)行。

在內(nèi)存使用較多的場景下,go程序在進行垃圾回收時會發(fā)生非常明顯的卡頓現(xiàn)象(Stop The World)。在對響應(yīng)速度要求較高的后臺服務(wù)進程中,這種延遲簡直是不能忍受的!這個時期國內(nèi)外很多在生產(chǎn)環(huán)境實踐go語言的團隊都或多或少踩過gc的坑。

當(dāng)時解決這個問題比較常用的方法是盡快控制自動分配內(nèi)存的內(nèi)存數(shù)量以減少gc負(fù)荷,同時采用手動管理內(nèi)存的方法處理需要大量及高頻分配內(nèi)存的場景。

1.3版本開始go team開始對gc性能進行持續(xù)的改進和優(yōu)化,每個新版本的go發(fā)布時gc改進都成為大家備受關(guān)注的要點。

1.3版本中,go runtime分離了mark和sweep操作,和以前一樣,也是先暫停所有任務(wù)執(zhí)行并啟動mark,mark完成后馬上就重新啟動被暫停的任務(wù)了,而是讓sweep任務(wù)和普通協(xié)程任務(wù)一樣并行的和其他任務(wù)一起執(zhí)行。

如果運行在多核處理器上,go會試圖將gc任務(wù)放到單獨的核心上運行而盡量不影響業(yè)務(wù)代碼的執(zhí)行。go team自己的說法是減少了50%-70%的暫停時間。

1.4版本(當(dāng)前最新穩(wěn)定版本)對gc的性能改動并不多。1.4版本中runtime很多代碼取代了原生c語言實現(xiàn)而采用了go語言實現(xiàn),對gc帶來的一大改變是可以是實現(xiàn)精確的gc。

c語言實現(xiàn)在gc時無法獲取到內(nèi)存的對象信息,因此無法準(zhǔn)確區(qū)分普通變量和指針,只能將普通變量當(dāng)做指針,如果碰巧這個普通變量指向的空間有其他對象,那這個對象就不會被回收。

而go語言實現(xiàn)是完全知道對象的類型信息,在標(biāo)記時只會遍歷指針指向的對象,這樣就避免了C實現(xiàn)時的堆內(nèi)存浪費(解決約10-30%)。

1.5版本go team對gc又進行了比較大的改進(1.4中已經(jīng)埋下伏筆如write barrier的引入),官方的主要目標(biāo)是減少延遲。go 1.5正在實現(xiàn)的垃圾回收器是“非分代的、非移動的、并發(fā)的、三色的標(biāo)記清除垃圾收集器”。

分代算法上文已經(jīng)提及,是一種比較好的垃圾回收管理策略,然1.5版本中并未考慮實現(xiàn);我猜測的原因是步子不能邁太大,得逐步改進,go官方也表示會在1.6版本的gc優(yōu)化中考慮。

同時引入了上文介紹的三色標(biāo)記法,這種方法的mark操作是可以漸進執(zhí)行的而不需每次都掃描整個內(nèi)存空間,可以減少stop the world的時間。

由此可以看到,一路走來直到1.5版本,go的垃圾回收性能也是一直在提升,但是相對成熟的垃圾回收系統(tǒng)(如java jvm和javascript v8),go需要優(yōu)化的路徑還很長(但是相信未來一定是美好的~)。

以上就是golang 有g(shù)c嗎的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

文章名稱:golang的垃圾回收器介紹-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://bm7419.com/article42/hcdhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、App開發(fā)、營銷型網(wǎng)站建設(shè)、網(wǎng)站排名、建站公司、搜索引擎優(yōu)化

廣告

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

搜索引擎優(yōu)化