一文带你搞懂python的内存回收机制(引用计数 标记清除 分代回收)

本文详细介绍了Python的内存回收机制,包括引用计数、标记清除和分代回收。引用计数是最基本的方法,但无法处理循环引用问题;标记清除解决了循环引用,通过检测和清除无法到达的对象;分代回收进一步优化,通过对象的代数减少回收频率,以提高效率。
摘要由CSDN通过智能技术生成

python中垃圾回收机制,核心要素有三个,分别是:引用计数、标记清除、分代回收。

垃圾回收机制以引用计数为主,分代回收为辅。

发生时机:手动调用gc模块中的collect方法;gc的计数器到达阈值;程序退出;

引用计数:
说明:

​ 一个对象在内存中,每有一个变量指向这个对象,这个对象的引用次数就加1。每删除一个指向这个对象的变量,对象的引用次数就减1,当指向这个对象的所有变量都被删除了的时候,这个对象的引用计数就是0。垃圾回收机制会回收这个对象。

举例:

1、有一条小狗,有个人看见了它,就给它起了一个名字叫小灰,又有一个人看见了它,就叫它大灰。那这时候,这条小狗就有两个名字。也就对应着一个对象有两个变量引用它,引用计数是2。

2、过了一段时间,总叫它小灰的人离开了,没有人叫它小灰了。这条小狗只剩了一个名字-大灰。也就意味着指向这个对象的变量只有一个了,引用计数就是1.

3、又过了一段时间,叫它大灰的人也走了,这条小狗就没名字了。对象的引用计数变成0。

4、这时候,没有人认识这条小狗了,它就被当成流浪动物送走了。也就是对象被回收了。

特殊情况说明:

存在一种情况,也就是两个对象互相引用的时候,两个对象就会始终存在一个标记,也就是引用计数会一直大于0。这时候,单靠引用计数就无法回收对象,就发生了内存泄露。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值