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

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

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

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

一、引用計數(shù)

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

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

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

對象的別名被顯式銷毀,比如:del a對象的別名被賦予新的對象,比如:a = 26對象離開它的作用域,比如 func() 執(zhí)行完畢時,函數(shù)里面的所有局部變量的引用計數(shù)都會減 1將元素從容器中刪除,或者容器被銷毀當對象的引用計數(shù)為 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 是對象的引用計數(shù)。對象有新的引用時,它的 ob_refcnt 會增加;當對象的引用被刪除時,ob_refcnt 會減少。當引用計數(shù)為 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)

引用計數(shù)有很明顯的優(yōu)點:

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

原始的引用計數(shù)法也有明顯的缺點:

維護引用計數(shù)消耗資源,維護引用計數(shù)的次數(shù)和引用賦值成正比 無法解決循環(huán)引用的問題

比如:

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

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

二、標記-清除

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

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

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

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

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

三,分代回收

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

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

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
秋霞国产精品| 中文在线а√在线8| 首页国产精品| 视频福利一区| 久久久精品五月天| 久久久久99| 久久国产电影| 视频一区欧美精品| 日韩影院在线观看| 在线精品国产亚洲| 日韩欧美四区| 国产精品一区三区在线观看| 国产日产一区| 国产精品夜夜夜| 久久精品一本| 国产精品jk白丝蜜臀av小说| 国产精选在线| 成人羞羞在线观看网站| 免费久久精品| 日韩一区二区免费看| 国产精品老牛| 97精品久久| 国产成人在线中文字幕| 欧美日韩免费观看视频| 精品欧美久久| 亚洲精品裸体| 久久精品资源| 久久久久亚洲| 亚洲丝袜美腿一区| 国产精品亚洲产品| 日韩精品91| 亚洲精品一二| 麻豆国产精品777777在线| 蜜桃av.网站在线观看| 国产亚洲一级| 欧美黑人做爰爽爽爽| 日韩在线看片| 在线亚洲一区| 欧美日韩一视频区二区| 亚洲有吗中文字幕| 韩日一区二区| 亚洲精品小说| 久久精品99国产国产精| 激情综合五月| 怡红院精品视频在线观看极品| 亚洲精品大片| 女生影院久久| 国产精品视频一区二区三区四蜜臂| 97精品中文字幕| 日韩视频精品在线观看| 欧美一区在线观看视频| 激情五月综合| 国产精品久久久久9999高清| 99视频精品全国免费| 日韩福利视频导航| 国产精品女主播一区二区三区| 国产欧美69| 亚洲成人免费| 欧美激情视频一区二区三区在线播放| 免费日韩av片| 国产精品蜜芽在线观看| 亚洲精品四区| 在线一区视频观看| 精品网站999| 免费在线看一区| 91亚洲国产高清| 日韩国产在线不卡视频| 日韩专区在线视频| 日韩在线看片| 国产精品多人| 亚洲欧美日韩国产一区| 999精品色在线播放| 欧美亚洲免费| 国产视频一区欧美| 欧美一级鲁丝片| 九九99久久精品在免费线bt| 免费一级片91| 日韩欧美一区二区三区在线观看| 欧美一区二区三区久久精品| 亚洲欧美日韩在线观看a三区| 精品入口麻豆88视频| 中文不卡在线| 国精品一区二区三区| 日韩伦理福利| 国产乱码精品一区二区三区亚洲人| 精品免费av在线| 国产精品久久久久77777丨| 亚洲午夜电影| 精品国产亚洲一区二区三区大结局| 自拍自偷一区二区三区| 久久精品导航| 精品视频高潮| 精品视频91| 国产欧美三级| 亚洲+小说+欧美+激情+另类| 亚洲免费一区二区| 黄色亚洲在线| 久久久人人人| 91欧美国产| 美女视频黄久久| 精品一区视频| 欧美黄色精品| 国产另类在线| 日韩精品导航| 欧美精品aa| 国产日韩在线观看视频| 综合激情五月婷婷| 中文精品视频| 亚洲欧美一级| 亚洲一区二区av| 男女性色大片免费观看一区二区 | 精品一区av| 国产精品永久| 欧美日韩1区| 国产一区二区三区亚洲| 国产精品香蕉| 国产精品99精品一区二区三区∴ | 精品久久中文| 免费在线欧美黄色| 国产精品视频一区二区三区四蜜臂 | 欧美激情 亚洲a∨综合| 国产精品三p一区二区| 精品欧美日韩精品| 精品国产精品国产偷麻豆 | 视频福利一区| 亚洲高清久久| 国产精品国产一区| 日本蜜桃在线观看视频| 日韩中文在线播放| 午夜av不卡| 欧美日韩一区二区综合| 国产一区二区三区亚洲综合| 女主播福利一区| 成人久久一区| 精品久久久网| 在线天堂资源www在线污| 五月激情久久| 狠狠干综合网| 亚洲午夜免费| 精品亚洲精品| 视频小说一区二区| 欧美日韩国产综合网| 人人爽香蕉精品| 精品一级视频| 99视频精品全国免费| 午夜视频精品| 亚洲狼人精品一区二区三区| 欧美日韩99| 精品国产亚洲一区二区三区在线| 麻豆一区二区三区| 视频国产精品| 亚州av乱码久久精品蜜桃| 免费在线看一区| 久久亚洲精品中文字幕| 日产精品一区二区| 激情婷婷久久| 日韩黄色av| 亚洲性图久久| 国产精品久久久久9999高清| 麻豆精品视频在线观看| 尤物精品在线| 久久久久久久欧美精品| 国产精品成人一区二区网站软件| 一区二区自拍| 精品视频自拍| 男人操女人的视频在线观看欧美| 国产一区二区精品久| 日韩欧美精品一区二区综合视频| 久久婷婷丁香| 欧美激情麻豆| 亚洲精品日本| 国产伊人精品| 精品久久99| 91精品丝袜国产高跟在线| 五月天久久网站| 中文字幕在线看片| 国产日本亚洲| 视频一区视频二区中文| 久久精品卡一| 国产一区二区三区久久| 日韩精品一区二区三区中文| 婷婷国产精品| 精品成av人一区二区三区| 日韩精品久久久久久久软件91| 欧美日韩高清| 日韩欧美少妇| 成人精品久久| 国产伦理一区| 日韩中文一区二区| 亚洲国产日韩欧美在线| 给我免费播放日韩视频| 国产日韩中文在线中文字幕| 蜜桃一区二区三区在线| 欧美一区二区三区高清视频| 国内一区二区三区| 国产精品任我爽爆在线播放| 色8久久久久| 免费看日韩精品| 美女国产精品| 国产亚洲亚洲|