python的垃圾清除机制是以引用技术为主,标记--清除和分代回收为辅。
1.引用计数是指python中的对象每被引用一次就计数加1,删除一次就计数减1,计数为0则被回收,但是循环引用导致计数不为1,则无法被回收,这也是引用计数最大的缺点,为了解决这个问题就引用了标记清除和隔代回收两种辅助机制。
2.标记--清除基本思路是按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历对象为节点,引用为边界,构成有向图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。
3.分代回收的整体思想是:将系统中所有的内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。
python默认定义了三代对象集合,索引数越大,对象存活时间越长。