站長資訊網
        最全最豐富的資訊網站

        go語言有gc嗎

        go語言有gc。GC是指垃圾回收,是一種自動內存管理的機制;go語言支持GC,Go中對象內存空間的回收是通過GC機制來完成的。對于Go而言,Go的GC使用的是無分代(對象沒有代際之分)、不整理(回收過程中不對對象進行移動與整理)、并發(與用戶代碼并發執行)的三色標記清掃算法。

        go語言有gc嗎

        php入門到就業線上直播課:進入學習
        Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

        本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

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

        Go語言和C/C++語言的一個顯著的特點是Go中對象內存空間的回收是通過GC機制來完成的,不需要像C++一樣通過程序員的手動申請和釋放,所以Go中相對不容易出現內存泄漏。今天我們就來聊聊Go中的GC機制。

        什么是GC,又有什么用?

        GC,全稱 Garbage Collection,即垃圾回收,是一種自動內存管理的機制。

        當程序向操作系統申請的內存不再需要時,垃圾回收主動將其回收并供其他代碼進行內存申請時候復用,或者將其歸還給操作系統,這種針對內存級別資源的自動回收過程,即為垃圾回收。而負責垃圾回收的程序組件,即為垃圾回收器。

        垃圾回收其實一個完美的 “Simplicity is Complicated” 的例子。一方面,程序員受益于 GC,無需操心、也不再需要對內存進行手動的申請和釋放操作,GC 在程序運行時自動釋放殘留的內存。另一方面,GC 對程序員幾乎不可見,僅在程序需要進行特殊優化時,通過提供可調控的 API,對 GC 的運行時機、運行開銷進行把控的時候才得以現身。

        通常,垃圾回收器的執行過程被劃分為兩個半獨立的組件:

        • 賦值器(Mutator):這一名稱本質上是在指代用戶態的代碼。因為對垃圾回收器而言,用戶態的代碼僅僅只是在修改對象之間的引用關系,也就是在對象圖(對象之間引用關系的一個有向圖)上進行操作。

        • 回收器(Collector):負責執行垃圾回收的代碼。

        GC中的根對象

        根對象在垃圾回收的術語中又叫做根集合,它是垃圾回收器在標記過程時最先檢查的對象,包括:

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

        • 執行棧:每個 goroutine 都包含自己的執行棧,這些執行棧上包含棧上的變量及指向分配的堆內存區塊的指針。

        • 寄存器:寄存器的值可能表示一個指針,參與計算的這些指針可能指向某些賦值器分配的堆內存區塊。

        GC的實現方式

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

        • 追蹤式 GC

          從根對象出發,根據對象之間的引用信息,一步步推進直到掃描完畢整個堆并確定需要保留的對象,從而回收所有可回收的對象。Go、 Java、V8 對 JavaScript 的實現等均為追蹤式 GC。

        • 引用計數式 GC

          每個對象自身包含一個被引用的計數器,當計數器歸零時自動得到回收。因為此方法缺陷較多,在追求高性能時通常不被應用。Python、Objective-C 等均為引用計數式 GC。

        目前比較常見的 GC 實現方式包括:

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

          • 標記清掃:從根對象出發,將確定存活的對象進行標記,并清掃可以回收的對象。

          • 標記整理:為了解決內存碎片問題而提出,在標記過程中,將對象盡可能整理到一塊連續的內存上。

          • 增量式:將標記與清掃的過程分批執行,每次執行很小的部分,從而增量的推進垃圾回收,達到近似實時、幾乎無停頓的目的。

          • 增量整理:在增量式的基礎上,增加對對象的整理過程。

          • 分代式:將對象根據存活時間的長短進行分類,存活時間小于某個值的為年輕代,存活時間大于某個值的為老年代,永遠不會參與回收的對象為永久代。并根據分代假設(如果一個對象存活時間不長則傾向于被回收,如果一個對象已經存活很長時間則傾向于存活更長時間)對對象進行回收。

        • 引用計數:根據對象自身的引用計數來回收,當引用計數歸零時立即回收。

        Go中GC的實現方式

        對于 Go 而言,Go 的 GC 使用的是無分代(對象沒有代際之分)、不整理(回收過程中不對對象進行移動與整理)、并發(與用戶代碼并發執行)的三色標記清掃算法。【

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 青青草97国产精品免费观看| 亚洲一级Av无码毛片久久精品 | 亚洲爆乳精品无码一区二区 | 国产精品 91 第一页| 日韩精品一区二区三区中文 | 亚洲国产精品国产自在在线| 99热亚洲精品6码| www国产精品| 久久精品国产清高在天天线| 欧美精品丝袜久久久中文字幕| 大胸国产精品视频| 国产精品久久久久影院色| 精品久久久久中文字幕日本| 亚洲精品国产字幕久久不卡| 久久亚洲中文字幕精品一区四| 99久久精品国产一区二区| 99久久精品国产麻豆| 国产精品区一区二区三在线播放| 中文精品久久久久人妻不卡 | 久久精品国产一区二区三区日韩| 92国产精品午夜福利| 国产精品人人爽人人做我的可爱| 日韩精品亚洲人成在线观看| 亚洲av永久无码精品表情包| 亚洲国产成人精品91久久久| 日本精品一区二区三区在线视频一 | 久久精品无码一区二区三区免费 | 久久夜色撩人精品国产小说| 精品国精品国产自在久国产应用男 | 91精品观看91久久久久久| 日本精品一区二区三区在线观看 | 欧美日韩国产中文精品字幕自在自线 | 久久99精品综合国产首页| 久久成人精品视频| 亚洲精品免费在线观看| 99久久99久久精品国产片果冻| 亚洲国产精品lv| 国产精品va在线观看无码| 国产精品爽爽ⅴa在线观看| 精品国产免费一区二区三区| 欧美激情精品久久久久久久九九九|