总结python的内存回收机制

2017-05-17  本文已影响0人  蒲编

python的内存回收以引用计数为主,分代回收和标记清除为辅的回收策略。

引用计数

python中一切都是对象:

 typedef struct_object {
 int ob_refcnt;
 struct_typeobject *ob_type;
} PyObject;

其中ob_refcnt就是该对象被引用的次数,每新增一个变量引用该对象,该值就增加1。

标记清除

为了解决循环计数而导致的内存泄漏,python搞了一种机制,是这么个意思:
因为最终肯定每个对象都要回收的,所以最后分配的计数值和释放掉的计数值要相等,但因为存在循环引用,所以它们的差会越来越大,当差大到某一个值后,python开始遍历“某一代”上的每一个对象,发现有循环引用的对象就将它们的引用计数减一,然后继续引用计数的回收策略。

分代回收

上面提到的某一代是指对象存在时间的“年代”,它是基于这种思想,存在时间越长的对象,程序就越需要它,而某些短暂生存的中间变量则要及时释放掉。
因此,Python中有零代,一代等,越小的代释放对象就越频繁。

上一篇 下一篇

猜你喜欢

热点阅读