python 回收机制 gc

分代回收是用来解决交叉引用(循环引用),并增加数据回收的效率.

原理:通过对象存在的时间不同,采用不同的算法来 回收垃圾.

形象的比喻, 三个链表,零代链表上的对象(新创建的对象都加入到零代链表),

引用数都是一,每增加一个指针,引用加一,随后python会检 测列表中的互相引用的对象,

根据规则减掉其引用计数. GC算法对链表一的引用减一,引用为0的清除,不为0的到链表二,链表二也执行GC算法,链表三一样. 存在时间越长的数据,越是有用的数据

 

(GC阈值) 隔代回收触发时间

随着你的程序运行,Python解释器保持对新创建的对象,以及因为引用计数为零而被释放掉的对象的追踪。

从理论上说,这两个值应该保持一致,因为程序新建的每个对象都应该最终被释放掉。

当然,事实并非如此。因为循环引用的原因,从而被分配对象的计数值与被释放对象的计数值之间的差异在逐渐增长。一旦这个差异累计超过某个阈值,则Python的收集机制就启动了,并且触发上边所说到的零代算法,释放“浮动的垃圾”,并且将剩下的对象移动到一代列表。

随着时间的推移,程序所使用的对象逐渐从零代列表移动到一代列表。而Python对于一代列表中对象的处理遵循同样的方法,一旦被分配计数值与被释放计数值累计到达一定阈值,Python会将剩下的活跃对象移动到二代列表。通过这种方法,你的代码所长期使用的对象,那些你的代码持续访问的活跃对象,会从零代链表转移到一代再转移到二代。通过不同的阈值设置,Python可以在不同的时间间隔处理这些对象。Python处理零代最为频繁,其次是一代然后才是二代。

 

 

 gc模块的使用

常用函数:

1、gc.get_count()

获取当前自动执行垃圾回收的计数器,返回一个长度为3的列表

2、gc.get_threshold() ->默认(700,10,10)

获取gc模块中自动执行垃圾回收的频率

3、gc.set_threshold(threshold0[,threshold1,threshold2])

设置自动执行垃圾回收的频率

4、gc.disable()

python3默认开启gc机制,可以使用该方法手动关闭gc机制

5、gc.collect()

手动调用垃圾回收机制回收垃圾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值