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) 收藏 举报
浙公网安备 33010602011771号