日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的垃圾回收机制_python里面的垃圾回收机制

發布時間:2023/12/19 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的垃圾回收机制_python里面的垃圾回收机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、引用計數機制:

python里每一個東西都是對象,它們的核心就是一個結構體:PyObject

typedef struct_object {

int ob_refcnt; #引用計數

struct_typeobject *ob_type;

} PyObject;

PyObject是每個對象必有的內容,其中ob_refcnt就是做為引用計數。當一個對象有新的引用時,它的ob_refcnt就會增加,當引用它的對象被刪除,它的ob_refcnt就會減少

#define Py_INCREF(op) ((op)->ob_refcnt++) //增加計數#define Py_DECREF(op) \ //減少計數

if (--(op)->ob_refcnt !=0) \

; \else\__Py_Dealloc((PyObject *)(op))

importsysclassA(object):def __init__(self):"""初始化對象"""

print ('object born id:%s'%str(hex(id(self))))deff1():"""循環引用變量與刪除變量"""

whileTrue:

c1=A()delc1deffunc(c):"""getrefcount() 返回對象的引用計數"""

print ('object refcount is:',sys.getrefcount(c))if __name__=='__main__':#生成對象

a=A()

func(a)#增強引用

b=a

func(a)#銷毀引用

delb

func(a)

結果:

object born id:0x1043059b0object refcountis: 4object refcountis: 5object refcountis: 4

gc方式1:引用計數

若此對象無其他對象引用,則立馬回收掉

優點:簡單、實時(將處理垃圾時間分攤到運行代碼時,而不是等到一次回收)

缺點:

1.保存對象引用數會占用一點點內存空間

2.每次執行語句都可能更新引用數,不再使用大的數據結構時,會引起大量對象被回收

3.不能處理循環引用的情況

gc方式2:標記-清除(Mark—Sweep)

此方式主要用來處理循環引用的情況,只有容器對象(list、dict、tuple,instance)才會出現循環引用的情況

處理過程1.將所有容器對象放到一個雙向鏈表中(鏈表為了方便插入刪除),這些對象為0代

2.循環遍歷鏈表,如果被本鏈表內的對象引入,自身的被引用數-1,如果被引用數為0,則觸發引用計數回收條件,被回收掉

3.未被回收的對象,升級為1代

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

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

何時觸發

1.被引用為0時,立即回收當前對象

2.達到了垃圾回收的閾值,觸發標記-清除

3.手動調用gc.collect()

4.Python虛擬機退出的時候

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python中的垃圾回收机制_python里面的垃圾回收机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。