Python 垃圾回收机制

Python 自身具备垃圾回收机制,可以屏蔽内存管理的复杂性,使开发者可以更好的关注核心的业务逻辑。

Python 的垃圾回收机制,以引用计数为主,标记清除和分代回收为辅。

引用计数

Python 内部通过引用计数机制来统计一个对象被引用的次数。在对象进行实例化的时候通过 ob_refcnt 参数记录这个对象的被变量引用的次数,当一个对象有新的引用时,ob_refcnt 加 1 。当这个数变成0的时候,就说明这个对象没有被引用了。这个时候它就变成了“垃圾”。

引用计数简单、实时性高,但需要额外的空间维护引用计数,并且无法解决循环引用问题。

标记清除

标记清除可以处理循环引用的问题。策略在进行垃圾回收时分成了两步,分别是:

策略在进行垃圾回收时分成了两步,分别是:

  • 标记阶段,遍历所有的对象,如果是可达的(reachable),也就是还有对象引用它,那么就标记该对象为可达。
  • 清除阶段,再次遍历对象,如果发现某个对象没有标记为可达,则就将其回收。

分代回收

分代回收建立标记清除的基础之上,因为我们的标记-清除策略会将我们的程序阻塞。为了减少应用程序暂停的时间,Python 通过“分代回收”策略。以空间换时间的方法提高垃圾回收效率。

当分配对象的个数达到 700 时,进行一次 0 代回收,当进行 10 次 0 代回收以后触发一次 1 代回收,当进行 10 次 1 代回收以后触发一次 2 代回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值