python垃圾回收机制_【干货】Python垃圾回收机制之分代收集

0694ea13bb86bc9c3453f98f17b356aa.png

Python垃圾回收机制

垃圾回收机制其实就是Python里帮我们管理内存、清理垃圾的一种工具,垃圾回收机制识别垃圾对象,从垃圾对象那里回收内存。

在Python中一般是采用的是引用计数机制为主,分代收集机制为辅的策略。

分代收集

经过前面说的【引用计数】和【标记-清理】方法,已经可以保证对垃圾的回收了。但是!还是有一个问题,【标记-清理】什么时候执行比较好呢?是对所有对象都同时执行吗?

同时执行很显然不合理,我们知道,存活越久的对象,说明他的引用更持久,为了更合理的进行【标记-删除】,就需要对对象进行分代处理(可以把“代”理解为“级”)。

那我们一起来看一下分代收集的原理:

新创建的对象会被做为0代,当执行一次【标记-删除】后,如果对象没有被删除,代数就+1。举例说明一下:

person =['小明']     #此时引用计数+1,总引用为:1animal= ['长颈鹿']   #此时引用计数+1,总引用为:1person.append(animal)   # 引用一次,animal引用计数+1,总引用为:2animal.append(person)   # 引用一次,person引用计数+1,总引用为:2del person

根据【引用计数】和【标记-清理】的机制,由于animal引用了person,所以【标记-清理】无法单独删除person,此时person的代数就会+1,变为1。

对象代数越多就意味着被删除失败的次数越多,也就是被引用得越多,【标记-删除】机制会优先删除代数低的对象,代数越高的对象(存活越持久的对象),进行【标记-删除】的时间间隔就越长,这个间隔,江湖人称阀值。

关于【引用计数】和【标记-清理】的详细介绍,请查看文章上方话题【垃圾回收机制】或查看往期文章

觉得老师讲得还不错的,不如来报一堂免费试听课?哈哈

6a2d6647c618f99e8b8ece1927f93465.gif

点击阅读原文~领取更多试听课程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值