Python 垃圾回收机制

高级语言如java,c#都采用了垃圾收集机制,c和c++里都是用户自己管理维护内存方式,python 采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略。

引用计数机制:

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))

当引用计数为0时,该对象生命就结束了。

引用计数的缺点:

1.维护引用计数消耗资源

2,循环引用

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

list1和list2相互引用,如果不存在其他对象对他们的引用,list1和list2的引用计数一直为1,占用的内存永远无法回收,会导致内存泄露,所以python有新的回收机制,标记清除和分代收集。

转载文章:http://www.jianshu.com/p/1e375fb40506

 

posted on 2017-08-29 16:30  孤舟蓑笠翁_EmilyNiu  阅读(162)  评论(0)    收藏  举报

导航