国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

為什么這么設(shè)計—— Go的GC

這篇具有很好參考價值的文章主要介紹了為什么這么設(shè)計—— Go的GC。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Go語言采用了3色標(biāo)記清理法來對內(nèi)存進(jìn)行自動垃圾回收,

過程是這樣的:
(1)起初所有的對象都是白色的;
(2)從根對象出發(fā)掃描所有可達(dá)對象,標(biāo)記為灰色,放入待處理隊列;
(3)從待處理隊列中取出灰色對象,將其引用的對象標(biāo)記為灰色并放入待處理隊列中,自身標(biāo)記為黑色;
(4)重復(fù)步驟(3),直到待處理隊列為空,此時白色對象即為不可達(dá)的“垃圾”,回收白色對象;

相比Java中的很多垃圾回收方法,Go的標(biāo)記清理有很大不同,Go中沒有劃分代的概念。

為什么標(biāo)記階段需要STW呢?

其中,標(biāo)記動作,是需要進(jìn)行STW的,標(biāo)記結(jié)束之后,關(guān)閉STW。為什么這么設(shè)計呢?
三色標(biāo)記法不使用STW的時候有可能會出現(xiàn):在結(jié)束某處的掃描后,新加入的依賴對象初始化為白色,會被直接清理掉。為了防止清理無辜對象,需要引入STW。

什么是根引用對象?

Go 程序的根節(jié)點(diǎn)通常包括以下幾類對象:

  1. 程序的全局變量和靜態(tài)變量:這些變量在整個程序執(zhí)行過程中都可以被訪問到,因此垃圾回收器會將它們作為根節(jié)點(diǎn)。
  2. 程序的調(diào)用棧中的變量:這些變量在函數(shù)調(diào)用過程中被創(chuàng)建,并在函數(shù)返回時被銷毀。因此,在函數(shù)調(diào)用期間,它們被認(rèn)為是根節(jié)點(diǎn)。
  3. 當(dāng)前執(zhí)行的Goroutine:在 Go 語言中,Goroutine 是輕量級的線程,它們可以獨(dú)立地運(yùn)行,因此當(dāng)前執(zhí)行的Goroutine也被認(rèn)為是根節(jié)點(diǎn)。

什么是強(qiáng)弱三色不變式

強(qiáng)弱三色不變式的目標(biāo)是保持以下兩個性質(zhì):

  1. 強(qiáng)三色不變式(Strong Tri-Color Invariant):在任何時刻,灰色對象不會直接或間接引用白色對象。這意味著垃圾回收器不會遺漏任何可達(dá)的對象。
  2. 弱三色不變式(Weak Tri-Color Invariant):在垃圾回收的過程中,黑色對象不會再次引用白色對象。這樣可以確保垃圾回收器不會將已經(jīng)回收的對象誤認(rèn)為存活對象。

通過維護(hù)這兩個不變式,垃圾回收器可以正確地標(biāo)記和清除不再使用的對象,同時避免將存活對象錯誤地回收。文章來源地址http://www.zghlxwxcb.cn/news/detail-650994.html

到了這里,關(guān)于為什么這么設(shè)計—— Go的GC的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Golang】Golang進(jìn)階系列教程--為什么說 Go 語言字符串是不可變的?

    【Golang】Golang進(jìn)階系列教程--為什么說 Go 語言字符串是不可變的?

    最近有讀者留言說,平時在寫代碼的過程中,是會對字符串進(jìn)行修改的,但網(wǎng)上都說 Go 語言字符串是不可變的,這是為什么呢? 這個問題本身并不困難,但對于新手來說確實(shí)容易產(chǎn)生困惑,今天就來回答一下。 首先來看看它的底層結(jié)構(gòu): 和切片的結(jié)構(gòu)很像,只不過少了一個

    2024年02月14日
    瀏覽(98)
  • 【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

    【Golang】一篇文章帶你快速了解Go語言&為什么你要學(xué)習(xí)Go語言

    目錄 1. 為什么互聯(lián)網(wǎng)世界需要Go語言 1.1 硬件限制:摩爾定律已然失效? 1.2 Go語言為并發(fā)而生 1.3 Go性能強(qiáng)悍 1.4 Go語言簡單易學(xué) 1.4.1 語法簡潔 1.4.2 代碼風(fēng)格統(tǒng)一 1.4.3開發(fā)效率高? 2.Go語言的誕生與發(fā)展 2.1什么是Go語言? ?2.2 Go語言的誕生 2.3?Go Gopher——Go語言的吉祥物 3. 為什么

    2024年02月04日
    瀏覽(37)
  • 【Golang】Golang進(jìn)階系列教程--為什么 Go for-range 的 value 值地址每次都一樣?

    循環(huán)語句是一種常用的控制結(jié)構(gòu),在 Go 語言中,除了 for 以外,還有一個 range ,可以使用 for-range 循環(huán)迭代數(shù)組、切片、字符串、map 和 channel 這些數(shù)據(jù)類型。 但是在使用 for-range 循環(huán)迭代數(shù)組和切片的時候,是很容易出錯的,甚至很多老司機(jī)一不小心都會在這里

    2024年02月15日
    瀏覽(22)
  • 為什么不用Go開發(fā)操作系統(tǒng)?

    為什么不用Go開發(fā)操作系統(tǒng)?

    ? 操作系統(tǒng) (OS) 是計算機(jī)系統(tǒng)的心臟和靈魂,它管理著計算機(jī)的硬件和軟件資源,并為用戶提供與計算機(jī)交互的方式。傳統(tǒng)上,C 和 Assembly 等語言因其低開銷和 “接近機(jī)器碼” 的特性而被用于開發(fā)操作系統(tǒng)。 但諸如 Go 等高級語言的興起引入了一些特性,這些特性或許可以使

    2024年02月06日
    瀏覽(38)
  • Netty為什么高效,為什么這么受歡迎?

    Netty為什么高效,為什么這么受歡迎?

    上篇文章通過 Java NIO 的處理流程與 Netty 的總體流程比較,并結(jié)合 Netty 的源碼,可以更加清晰地理解Netty。本文將結(jié)合源碼詳細(xì)解析Netty的高效和強(qiáng)大功能的設(shè)計原理,學(xué)習(xí) Netty 是如何實(shí)現(xiàn)其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的設(shè)計思想。 我們先看

    2024年02月12日
    瀏覽(40)
  • 區(qū)塊鏈到底是什么,為什么這么火爆

    區(qū)塊鏈到底是什么,為什么這么火爆

    一、相關(guān)背景介紹 互聯(lián)網(wǎng)上的貿(mào)易,幾乎都需要借助可資信賴的第三方信用機(jī)構(gòu)來處理電子支付信息。這類系統(tǒng)仍然內(nèi)生性地受制于“基于信用的模式”。 區(qū)塊鏈技術(shù)是構(gòu)建比特幣區(qū)塊鏈網(wǎng)絡(luò)與交易信息加密傳輸?shù)幕A(chǔ)技術(shù)。它基于密碼學(xué)原理而不基于信用,使得任何達(dá)成

    2023年04月08日
    瀏覽(22)
  • Kafka為什么這么快?

    Kafka 是一個基于發(fā)布-訂閱模式的消息系統(tǒng),它可以在多個生產(chǎn)者和消費(fèi)者之間傳遞大量的數(shù)據(jù)。Kafka 的一個顯著特點(diǎn)是它的高吞吐率,即每秒可以處理百萬級別的消息。那么 Kafka 是如何實(shí)現(xiàn)這樣高得性能呢?本文將從七個方面來分析 Kafka 的速度優(yōu)勢。 零拷貝技術(shù) 僅可追加

    2024年02月11日
    瀏覽(26)
  • AIGC技術(shù)到底是什么?為什么這么火熱?

    AIGC技術(shù)到底是什么?為什么這么火熱?

    AIGC(Artificial Intelligence in Game Creation)技術(shù)是指 利用人工智能技術(shù)來輔助游戲創(chuàng)作的過程 。 它可以通過機(jī)器學(xué)習(xí)、深度學(xué)習(xí)和自然語言處理等技術(shù),從大量的游戲數(shù)據(jù)中提取規(guī)律和模式,進(jìn)而生成游戲的內(nèi)容、關(guān)卡設(shè)計、角色行為等元素。 ? AIGC技術(shù)可以幫助游戲開發(fā)者快速

    2024年02月13日
    瀏覽(22)
  • 職場工作多年,為什么成長這么慢

    在職場工作多年,卻沒有成長,是許多人都會遇到的問題。這種情況可能讓人感到沮喪和無助,但是它的根本原因是什么呢?在本文中,我們將探討為什么會出現(xiàn)這種情況,以及如何克服這種困境。 成長需要我們對自己的能力和表現(xiàn)進(jìn)行評估和反思。如果沒有對自己的工作進(jìn)

    2023年04月16日
    瀏覽(32)
  • 48 | DMA:為什么Kafka這么快?

    48 | DMA:為什么Kafka這么快?

    過去幾年里,整個計算機(jī)產(chǎn)業(yè)界,都在嘗試不停地提升 I/O 設(shè)備的速度。把 HDD 硬盤換成 SSD 硬盤,我們?nèi)匀挥X得不夠快;用 PCI Express 接口的 SSD 硬盤替代 SATA 接口的 SSD 硬盤,我們還是覺得不夠快,所以,現(xiàn)在就有了傲騰(Optane)這樣的技術(shù)。 但是,無論 I/O 速度如何提升,

    2024年02月21日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包