python中内存回收机制
python中垃圾回收GC
-
Garbage collection(垃圾回收)
– 为新生成得对象分配内存
– 识别那些垃圾对象
– 从垃圾对象那回收内存 -
python采用得是 "引用计数机制 "为主, 标记-清楚和分代收集两种机制为辅的策略(本文主要解释引用计数)
引用计数机制的优缺点:
优点:
-- 简单
-- 实时性: 一旦没有引用,内存就直接释放了。不用像其他机制等到待定时机。 实时性还带来一个好处: 处理回收内存的时间分摊到了平时
缺点:
-- 维护引用计数消耗资源
-- 循环引用
引用计数
-
导致引用计数 +1 的情况
– 对象被创建, 例如 a = 1
– 对象被引用, 例如 b = a
– 对象被作为参数,传入到一个函数中,例如 func(a)
– 对象作为一个元素,存储在容器中, 例如 list = [a, b, c]
以上都会导致引用计数 +1 -
导致引用计数 -1 的情况
– 对象的别名被显式销毁, 例如 del a
– 对象的别名被赋予新的对象,例如 a=2
– 一个对象离开它的作用域,例如f函数执行完毕时, func函数中的局部变量(全局变量不会)
– 对象所在的容器被销毁, 或从容器中删除对象 -
python里每一个东西都是对象,它们的核心是一个结构体:PyObject
typedef struct_object {
int ob_refcnt;
struct_typrobject *ob_type;
}PyObjext;
#define Py_INCREF(op) - > ob_refcent ++ // 增加计数
#define Py_DECREF(op) \ // 减少计数
if (--(op) -> ob_refcent != 0) \
; \
else \
_Py_dealloc((PyObject *)(op))
注释:以上为垃圾回收机制模块代码,由C语言编写