久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      go語言有g(shù)c嗎

      go語言有g(shù)c。GC是指垃圾回收,是一種自動(dòng)內(nèi)存管理的機(jī)制;go語言支持GC,Go中對(duì)象內(nèi)存空間的回收是通過GC機(jī)制來完成的。對(duì)于Go而言,Go的GC使用的是無分代(對(duì)象沒有代際之分)、不整理(回收過程中不對(duì)對(duì)象進(jìn)行移動(dòng)與整理)、并發(fā)(與用戶代碼并發(fā)執(zhí)行)的三色標(biāo)記清掃算法。

      go語言有g(shù)c嗎

      php入門到就業(yè)線上直播課:進(jìn)入學(xué)習(xí)
      Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

      本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

      GC機(jī)制是在Java語言被廣泛使用之后所火起來的,像后來的腳本語言Python都支持GC,GO也支持GC。

      Go語言和C/C++語言的一個(gè)顯著的特點(diǎn)是Go中對(duì)象內(nèi)存空間的回收是通過GC機(jī)制來完成的,不需要像C++一樣通過程序員的手動(dòng)申請(qǐng)和釋放,所以Go中相對(duì)不容易出現(xiàn)內(nèi)存泄漏。今天我們就來聊聊Go中的GC機(jī)制。

      什么是GC,又有什么用?

      GC,全稱 Garbage Collection,即垃圾回收,是一種自動(dòng)內(nèi)存管理的機(jī)制。

      當(dāng)程序向操作系統(tǒng)申請(qǐng)的內(nèi)存不再需要時(shí),垃圾回收主動(dòng)將其回收并供其他代碼進(jìn)行內(nèi)存申請(qǐng)時(shí)候復(fù)用,或者將其歸還給操作系統(tǒng),這種針對(duì)內(nèi)存級(jí)別資源的自動(dòng)回收過程,即為垃圾回收。而負(fù)責(zé)垃圾回收的程序組件,即為垃圾回收器。

      垃圾回收其實(shí)一個(gè)完美的 “Simplicity is Complicated” 的例子。一方面,程序員受益于 GC,無需操心、也不再需要對(duì)內(nèi)存進(jìn)行手動(dòng)的申請(qǐng)和釋放操作,GC 在程序運(yùn)行時(shí)自動(dòng)釋放殘留的內(nèi)存。另一方面,GC 對(duì)程序員幾乎不可見,僅在程序需要進(jìn)行特殊優(yōu)化時(shí),通過提供可調(diào)控的 API,對(duì) GC 的運(yùn)行時(shí)機(jī)、運(yùn)行開銷進(jìn)行把控的時(shí)候才得以現(xiàn)身。

      通常,垃圾回收器的執(zhí)行過程被劃分為兩個(gè)半獨(dú)立的組件:

      • 賦值器(Mutator):這一名稱本質(zhì)上是在指代用戶態(tài)的代碼。因?yàn)閷?duì)垃圾回收器而言,用戶態(tài)的代碼僅僅只是在修改對(duì)象之間的引用關(guān)系,也就是在對(duì)象圖(對(duì)象之間引用關(guān)系的一個(gè)有向圖)上進(jìn)行操作。

      • 回收器(Collector):負(fù)責(zé)執(zhí)行垃圾回收的代碼。

      GC中的根對(duì)象

      根對(duì)象在垃圾回收的術(shù)語中又叫做根集合,它是垃圾回收器在標(biāo)記過程時(shí)最先檢查的對(duì)象,包括:

      • 全局變量:程序在編譯期就能確定的那些存在于程序整個(gè)生命周期的變量。

      • 執(zhí)行棧:每個(gè) goroutine 都包含自己的執(zhí)行棧,這些執(zhí)行棧上包含棧上的變量及指向分配的堆內(nèi)存區(qū)塊的指針。

      • 寄存器:寄存器的值可能表示一個(gè)指針,參與計(jì)算的這些指針可能指向某些賦值器分配的堆內(nèi)存區(qū)塊。

      GC的實(shí)現(xiàn)方式

      所有的 GC 算法其存在形式可以歸結(jié)為追蹤(Tracing)和引用計(jì)數(shù)(Reference Counting)這兩種形式的混合運(yùn)用。

      • 追蹤式 GC

        從根對(duì)象出發(fā),根據(jù)對(duì)象之間的引用信息,一步步推進(jìn)直到掃描完畢整個(gè)堆并確定需要保留的對(duì)象,從而回收所有可回收的對(duì)象。Go、 Java、V8 對(duì) JavaScript 的實(shí)現(xiàn)等均為追蹤式 GC。

      • 引用計(jì)數(shù)式 GC

        每個(gè)對(duì)象自身包含一個(gè)被引用的計(jì)數(shù)器,當(dāng)計(jì)數(shù)器歸零時(shí)自動(dòng)得到回收。因?yàn)榇朔椒ㄈ毕葺^多,在追求高性能時(shí)通常不被應(yīng)用。Python、Objective-C 等均為引用計(jì)數(shù)式 GC。

      目前比較常見的 GC 實(shí)現(xiàn)方式包括:

      • 追蹤式,分為多種不同類型,例如:

        • 標(biāo)記清掃:從根對(duì)象出發(fā),將確定存活的對(duì)象進(jìn)行標(biāo)記,并清掃可以回收的對(duì)象。

        • 標(biāo)記整理:為了解決內(nèi)存碎片問題而提出,在標(biāo)記過程中,將對(duì)象盡可能整理到一塊連續(xù)的內(nèi)存上。

        • 增量式:將標(biāo)記與清掃的過程分批執(zhí)行,每次執(zhí)行很小的部分,從而增量的推進(jìn)垃圾回收,達(dá)到近似實(shí)時(shí)、幾乎無停頓的目的。

        • 增量整理:在增量式的基礎(chǔ)上,增加對(duì)對(duì)象的整理過程。

        • 分代式:將對(duì)象根據(jù)存活時(shí)間的長(zhǎng)短進(jìn)行分類,存活時(shí)間小于某個(gè)值的為年輕代,存活時(shí)間大于某個(gè)值的為老年代,永遠(yuǎn)不會(huì)參與回收的對(duì)象為永久代。并根據(jù)分代假設(shè)(如果一個(gè)對(duì)象存活時(shí)間不長(zhǎng)則傾向于被回收,如果一個(gè)對(duì)象已經(jīng)存活很長(zhǎng)時(shí)間則傾向于存活更長(zhǎng)時(shí)間)對(duì)對(duì)象進(jìn)行回收。

      • 引用計(jì)數(shù):根據(jù)對(duì)象自身的引用計(jì)數(shù)來回收,當(dāng)引用計(jì)數(shù)歸零時(shí)立即回收。

      Go中GC的實(shí)現(xiàn)方式

      對(duì)于 Go 而言,Go 的 GC 使用的是無分代(對(duì)象沒有代際之分)、不整理(回收過程中不對(duì)對(duì)象進(jìn)行移動(dòng)與整理)、并發(fā)(與用戶代碼并發(fā)執(zhí)行)的三色標(biāo)記清掃算法?!?/p>

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)