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。
对象代数越多就意味着被删除失败的次数越多,也就是被引用得越多,【标记-删除】机制会优先删除代数低的对象,代数越高的对象(存活越持久的对象),进行【标记-删除】的时间间隔就越长,这个间隔,江湖人称阀值。
关于【引用计数】和【标记-清理】的详细介绍,请查看文章上方话题【垃圾回收机制】或查看往期文章。
觉得老师讲得还不错的,不如来报一堂免费试听课?哈哈
点击阅读原文~领取更多试听课程