python 回收机制

1.引用计数为主,标记清除和分代回收为辅助。

2.引用计数:当对象的引用计数为0,python的解释器则会释放该对象的内存。

3.标记清除:“标记-清除”是为了解决循环引用的问题。可以包含其他对象引用的容器        对象(比如:list,set,dict,class,instance)都可能产生循环引用。原理:将集     合中对象的引用计数复制一份副本。这个计数副本的唯一作用是寻找root object集合(该集合中的对象是不能被回收的)。当成功寻找到root object集合之后,首先将现在的内存链表一分为二,一条链表中维护root object集合,成为root链表,而另外一条链表中维护剩下的对象,成为unreachable链表。之所以要剖成两个链表,是基于这样的一种考虑:现在的unreachable可能存在被root链表中的对象,直接或间接引用的对象,这些对象是不能被回收的,一旦在标记的过程中,发现这样的对象,就将其从unreachable链表中移到root链表中;当完成标记后,unreachable链表中剩下的所有对象就是名副其实的垃圾对象了,接下来的垃圾回收只需限制在unreachable链表中即可。


4.分代回收:采用牺牲空间来提高效率节省时间的策略,原理:将系统中所有的内存块根据其存活的时间划分为不同的集合。每个集合称为一个代,垃圾回收的频率随着代存活时间的增大而减少。可以跟局代数,计算对象存活时间。


5.GC 模块

  1.print gc.garbage 打印垃圾池

  2.gc.collect()      参数为0:一代, 参数为1:二代   ,2:三代

  3.gc.set_threshold(700,10,11)  700:一代回收阀值  10:二代回收阀值 11:三代阀值

  4.gc.set_debug(gc.DEBUG_LEAK)  打印泄露日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值