DAY12、python中的GC模块

python中的GC模块

python中的垃圾回收是以引用计数为主,分代收集为辅

导致引用计数+1的情况
1、对象被创建
2、对象被引用
3、对象被作为参数,传入到一个函数中
4、对象作为一个元素,存储在容器中

导致引用计数-1的情况
1、对象的别名被显式销毁
2、对象的别名被赋予新的对象
3、一个对象离开它的作用域,例如f函数执行完毕时,func函数中的局部变量(全局变量不会)
4、对象所在的容器被销毁,或从容器中删除对象。

查看一个对象的引用计数
在这里插入图片描述
可以查看a对象的引用计数,但是比正常计数大1,因为调用函数的时候传入a,这会让a的引用计数+1

内存泄漏
申请了某些内存,但是忘记了释放,那么这就造成了内存的浪费,久而久之内存就不够用了

演示
在这里插入图片描述
执行f2,进程占用的内存会不断增大。
创建了c1,c2后,这两块内存的引用计数都是1,执行c1.t=c2和c2.t=c1后,这两块内存的引用计数变成2.在del c1后,引用计数变为1,由于不是0,所以c1对象不会被销毁;同理,c2对象的引用数也是1.
python默认是开启垃圾回收功能的,但是由于以上程序已经将其关闭,因此导致垃圾回收器都不会回收它们,所以就会导致内存泄露。

手动调用gc回收垃圾
在这里插入图片描述
有三种情况会触发垃圾回收:
1、当gc模块的计数器达到阈值的时候,自动回收垃圾。
2、调用gc.collect(),手动回收垃圾
3、程序退出的时候,python解释器来回收垃圾

gc模块的自动垃圾回收触发机制
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值