Python垃圾回收机制
Python垃圾回收机制,主要使用’引用计数’来跟踪和回收垃圾。
在’引用计数’的基础上,通过’标记-清除’(mark and sweep)解决容器对象可能产生的循环引用问题.
通过’分代回收’以空间换时间的方法提高垃圾回收效率。
‘引用计数’
PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。
当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,
它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。
\优点:1.简单 2.实时性
\缺点:1.维护引用计数消耗资源 2.循环引用
‘标记-清楚机制’
基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,
遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,
然后清扫一遍内存空间,把所有没标记的对象释放。
‘分代技术’
分代回收的整体思想是:
将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,
垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。