第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么永遠(yuǎn)不會(huì)調(diào)用終結(jié)器?

為什么永遠(yuǎn)不會(huì)調(diào)用終結(jié)器?

Go
泛舟湖上清波郎朗 2023-04-24 16:50:59
var p = &sync.Pool{    New: func() interface{} {        return &serveconn{}    },}func newServeConn() *serveconn {    sc := p.Get().(*serveconn)    runtime.SetFinalizer(sc, (*serveconn).finalize)    fmt.Println(sc, "SetFinalizer")    return sc}func (sc *serveconn) finalize() {    fmt.Println(sc, "finalize")    *sc = serveconn{}    runtime.SetFinalizer(sc, nil)    p.Put(sc)}上面的代碼嘗試重用 object by SetFinalizer,但調(diào)試后我發(fā)現(xiàn) finalizer 從未被調(diào)用,為什么?更新這可能是相關(guān)的: https: //github.com/golang/go/issues/2368
查看完整描述

1 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

上面的代碼嘗試重用 object by SetFinalizer,但調(diào)試后我發(fā)現(xiàn) finalizer 從未被調(diào)用,為什么?

僅當(dāng) GC 將對(duì)象標(biāo)記為未使用時(shí)才會(huì)調(diào)用終結(jié)器,然后在 GC 周期結(jié)束時(shí)嘗試清掃(釋放)。

作為必然結(jié)果,如果在程序運(yùn)行期間從未執(zhí)行 GC 循環(huán),則可能永遠(yuǎn)不會(huì)調(diào)用您設(shè)置的終結(jié)器。

以防萬一您可能對(duì) Go 的 GC 持有錯(cuò)誤的假設(shè),可能值得注意的是 Go 不對(duì)值使用引用計(jì)數(shù);相反,它使用與程序并行工作的 GC,并且它工作的會(huì)話定期發(fā)生,并由某些參數(shù)觸發(fā),例如分配產(chǎn)生的堆壓力。

關(guān)于終結(jié)器的一些注釋:

  • 當(dāng)程序終止時(shí),不會(huì)強(qiáng)制運(yùn)行 GC。

    這樣做的一個(gè)必然結(jié)果是終結(jié)器根本不能保證運(yùn)行。

  • 如果 GC 在將要釋放的對(duì)象上找到終結(jié)器,它會(huì)調(diào)用終結(jié)器但不會(huì)釋放該對(duì)象。

    對(duì)象本身只會(huì)在下一個(gè) GC 周期被釋放——浪費(fèi)內(nèi)存。

總而言之,您看起來像是在嘗試實(shí)現(xiàn)析構(gòu)函數(shù)。請(qǐng)不要:讓你的對(duì)象實(shí)現(xiàn)被調(diào)用的那種標(biāo)準(zhǔn)方法,Close并在你的類型的契約中聲明程序員在完成對(duì)象時(shí)需要調(diào)用它。當(dāng)程序員無論如何都想調(diào)用這樣的方法時(shí),他們會(huì)使用defer.

請(qǐng)注意,這種方法非常適用于 Go stdlib 中的所有類型,這些類型包裝了操作系統(tǒng)提供的資源——文件和套接字描述符。所以沒有必要假裝你的類型有什么不同。

要記住的另一件有用的事情是,Go 被明確設(shè)計(jì)為嚴(yán)肅、簡(jiǎn)潔、沒有魔法、面對(duì)面的語言,而您只是想為其添加魔法。請(qǐng)不要,那些喜歡解密魔法層的人會(huì)使用Scala不同的語言進(jìn)行編程。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 168 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)