日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python中的垃圾回收(GC)機制

瀏覽:181日期:2022-07-10 16:43:45

一、引用計數

Python 垃圾回收以引用計數為主,分代回收為輔。引用計數法的原理是每個對象維護一個ob_refcnt,用來記錄對象被引用的次數,也就是用來追蹤有多少個引用指向了對象,當發生以下四種情況的時候,對象的引用計數+1:

對象被創建,比如:a = 14 對象被引用,比如: b = a 對象被作為參數,傳給函數,比如:func(a) 對象作為容器中的一個元素,比如:List = {a, ”a” , ”b”, 2}

與上述情況相對應,當發生以下四種情況時,對象的引用計數-1:

對象的別名被顯式銷毀,比如:del a對象的別名被賦予新的對象,比如:a = 26對象離開它的作用域,比如 func() 執行完畢時,函數里面的所有局部變量的引用計數都會減 1將元素從容器中刪除,或者容器被銷毀當對象的引用計數為 0 時,它將被 Python 虛擬機回收。

在 Python 中一切皆對象,它們的核心是 Py_Object 結構體,所有 Python 對象的頭部都包含該結構:

// object.h#define PyObject_HEAD _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; struct _typeobject *ob_type;​typedef struct _object { PyObject_HEAD} PyObject;

比如 int 類型的定義如下:

// intobj.htypedef struct { PyObject_HEAD long ob_ival;} PyIntObject;

簡而言之,PyObject 是每個對象必有的內容,其中 ob_refcnt 是對象的引用計數。對象有新的引用時,它的 ob_refcnt 會增加;當對象的引用被刪除時,ob_refcnt 會減少。當引用計數為 0 時,對象的生命周期就結束了。

// object.h#define Py_INCREF(op) ( _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA ((PyObject*)(op))->ob_refcnt++)​#define Py_DECREF(op) do { if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA --((PyObject*)(op))->ob_refcnt != 0) _Py_CHECK_REFCNT(op) else _Py_Dealloc((PyObject *)(op)); } while (0)

引用計數有很明顯的優點:

高效 運行期沒有停頓,即實時性:對象一旦沒有引用,將直接被釋放。實時性還帶來一個好處是:處理回收內存的時間分攤到了平時 對象有確定的生命周期 易于實現

原始的引用計數法也有明顯的缺點:

維護引用計數消耗資源,維護引用計數的次數和引用賦值成正比 無法解決循環引用的問題

比如:

list1 = []list2 = []list1.append(list2)list2.append(list1)

為了解決這兩個致命弱點,Python 又引入了以下兩種 GC 機制。

二、標記-清除

『標記-清除(Mark-Sweep)』算法是一種基于追蹤回收(tracing GC)技術實現的垃圾回收算法。它分為兩個階段:第一階段是標記階段,GC 會給所有『活動對象』打上標記;第二階段是回收沒有標記的『非活動對象』。那么 GC 如何判斷哪些是活動對象、哪些是非活動對象呢?

對象之間通過引用(指針)連在一起,構成一個有向圖。對象是有向圖的頂點,引用關系是有向圖的弧。從根對象(root object)出發,遍歷有向圖,將可達的(reachable)對象標記為活動對象,不可達的對象就是要被清除的非活動對象。根對象是全局變量、調用棧、寄存器。

python中的垃圾回收(GC)機制

在上圖中,把小黑圈視為全局變量,也就是把它作為 root object,從小黑圈出發,對象 1 可直達,那么它將被標記,對象 2、3 可間接到達,也會被標記,而 4 和 5 不可達,因此 1、2、3 是活動對象,4 和 5 是非活動對象,會被 GC 回收。

標記清除算法作為 Python 的輔助垃圾回收技術,主要用于處理容器對象,比如 list、dict、tuple、instance 等,因為字符串、數值等原子類型的對象不可能造成循環引用問題。Python 使用雙向鏈表將容器對象組織起來。不過這種簡單粗暴的標記清除算法也有明顯的缺點:清除非活動對象前,必須順序掃描整個堆內存,哪怕只剩下小部分非活動對象,也要掃描所有對象。

三,分代回收

分代回收是一種以空間換時間的操作方式,Python 將內存根據對象的存活時間劃分為不同的集合,每個集合稱為一個代,Python 將內存分為了 3 代,分別為年輕代(第 0 代)、中年代(第 1 代)、老年代(第 2 代),它們對應是 3 個鏈表,垃圾回收頻率隨著對象存活時間的增大而減小。新創建的對象都會被分配到年輕代,當年輕代鏈表的節點總數達到上限時,Python 垃圾收集機制就會被觸發,把可以被回收的對象回收掉,而不能被回收的對象會被移到中年代去,依此類推,老年代中的對象是存活時間最久的對象,甚至存活于整個系統的生命周期內。分代回收建立在標記清除的基礎之上,分代回收同樣作為 Python 處理容器對象的輔助垃圾回收技術。

以上就是python中的GC機制的詳細內容,更多關于python GC的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
六月丁香综合| 日韩和的一区二在线| 黄色亚洲在线| 亚洲国产综合在线看不卡| 久久久久一区| 欧美精品一区二区三区精品| 欧美日韩中文一区二区| 久久一区二区三区电影| 欧美另类专区| 欧美资源在线| 日韩精品国产欧美| 国产精品手机在线播放| 欧美黄色一区| 国产91在线精品| 久久要要av| 蜜臀久久99精品久久久久久9| 91精品福利| 老色鬼久久亚洲一区二区| 视频精品一区| 久久只有精品| 欧美二区视频| 亚洲免费一区三区| 国产极品一区| 久久视频国产| 久久福利影视| 久久国内精品自在自线400部| 九九99久久精品在免费线bt| 桃色一区二区| 在线视频日韩| 日韩欧美高清一区二区三区| 国产精品久久久久久久久久齐齐| 国产欧美一区二区三区国产幕精品| 美女视频黄久久| 色老板在线视频一区二区| 麻豆9191精品国产| 国产精品99精品一区二区三区∴ | 国产视频久久| 日本不卡的三区四区五区| 欧美精品二区| 欧美一区二区三区高清视频| 亚洲精选91| 久久久91麻豆精品国产一区| 久久在线视频免费观看| 三级欧美在线一区| 国产精品九九| 欧美一区二区三区激情视频| 亚洲人www| 成人国产精品一区二区网站| 一本色道久久精品| 久久亚洲资源中文字| 欧美69视频| 国产日韩三级| 欧美粗暴jizz性欧美20| 国产探花在线精品一区二区| 成人羞羞视频在线看网址| 亚洲精品一二三**| 91麻豆国产自产在线观看亚洲| 国产精品女主播一区二区三区| 欧美精品三级在线| 亚洲成人一区在线观看| 日韩精品久久久久久久软件91| 亚洲啊v在线| 日韩成人一级| 午夜精品一区二区三区国产| 国产精品15p| 午夜在线视频观看日韩17c| 麻豆高清免费国产一区| 亚洲一区不卡| 在线观看精品| 国产精品777777在线播放| 最新亚洲一区| 黄在线观看免费网站ktv| 日韩精品亚洲专区| 久久免费高清| 麻豆精品av| 亚洲精选久久| 久久国产电影| 麻豆精品蜜桃视频网站| 四虎成人精品一区二区免费网站| 日韩欧美少妇| 麻豆精品少妇| 日本不卡中文字幕| 91成人网在线观看| 中文av在线全新| 国产精品九九| 亚洲精品在线国产| 国产一区清纯| 在线天堂中文资源最新版| 日本成人在线视频网站| 亚洲国产一区二区三区在线播放| 精品久久99| 国产欧美日韩精品一区二区免费| 国产毛片一区| 欧美色图国产精品| 美女av在线免费看| 欧美91在线| 日韩精品免费视频人成 | 国产日韩欧美一区二区三区 | 国产中文一区| 91日韩欧美| 精品网站999| 欧美亚洲免费| 一区二区国产在线观看| 欧美va天堂| 欧美sss在线视频| 三上亚洲一区二区| 成人亚洲一区| 超级白嫩亚洲国产第一| 麻豆一区二区三| 国产精久久一区二区| 国产一区 二区| 日韩avvvv在线播放| 亚洲一区二区网站| 亚洲专区在线| 亚洲神马久久| 午夜一级久久| 性色一区二区| 老司机精品久久| 一区二区亚洲视频| 三级欧美在线一区| 亚洲婷婷丁香| 日韩毛片网站| 国产日韩在线观看视频| 国产精品自拍区| 麻豆精品视频在线| 国产一区二区三区四区二区| 超碰99在线| 都市激情国产精品| 精品日韩视频| 在线日韩一区| 亚洲激情婷婷| 日韩中出av| 国产日韩欧美一区在线| 国产精品手机在线播放| 久久精品国产精品亚洲毛片| 久久一区精品| 中文字幕在线视频久| 亚洲综合在线电影| 国精品一区二区三区| 亚洲一区黄色| 日韩av中文字幕一区二区三区| 国产欧美69| 久久久免费人体| 伊人久久视频| 日韩视频在线一区二区三区| 三级亚洲高清视频| 91成人在线网站| 久久精品九色| 亚洲午夜精品久久久久久app| 国产一区清纯| 亚洲区第一页| 久久精品国产久精国产爱| 欧洲亚洲一区二区三区| 欧美不卡高清| 红桃视频国产一区| 久久亚洲色图| 亚洲精品激情| 欧美日韩99| 欧美精品二区| 久久青草久久| 亚洲视频二区| 久久久久亚洲精品中文字幕| 精品国产aⅴ| 久久精品免费一区二区三区 | 鲁大师精品99久久久| 亚洲天堂av影院| 国产99亚洲| 亚洲精品日韩久久| 国产成人精品一区二区三区视频| 亚洲va在线| 日本综合精品一区| 9999国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩avvvv在线播放| 国产成人精品一区二区三区免费| 激情久久中文字幕| 日韩精品电影一区亚洲| 国产成人77亚洲精品www| 亚洲精品在线观看91| 欧美日韩a区| 神马日本精品| 亚洲精品日韩久久| 免费看av不卡| 中文字幕免费一区二区| 国产一区二区三区黄网站| 五月天激情综合网| 国产精品一区二区av交换| 久久蜜桃av| 国产精品一区二区精品| 蜜臀久久99精品久久一区二区| 青草国产精品| 欧美 日韩 国产精品免费观看| 国产亚洲久久| 免费观看久久av| 黄色日韩在线| 精品亚洲a∨一区二区三区18| 午夜一级久久| 成人欧美一区二区三区的电影| 日韩一二三区在线观看| 日韩精品欧美|