Python--垃圾回收机制

python的垃圾回收机制:
  • python采用引用计数机制为主,标记-清楚和分代收集两种机制为辅的策略
引用计数机制:
  • 核心为:
  1. typedef struct_object{
  2.     int ob_refcnt; //引用计数器
  3.     struct_typeobject *ob_type;
  4. }PyObject;
  • 优点:
    • 简单
    • 实时性:一旦引用计数为0,内存就直接释放了,从而避免集中销毁时带来的集中开销
  • 缺点:
    • 引用计数器需要占用资源,在现代硬件资源充沛的情况下,这个问题不严重
    • 无法消除循环引用的问题
标记-清除机制:
  • 标记清理过程:
  1. 第一步,定义根节点,并标记为黑色,并将根节点关联的节点标记为灰色
  2. 第二步,将灰色节点的所有关联节点标记为灰色,在标记完所有关联节点后,将当前节点由灰色变为黑色
  3. 第三步,如果存在剩下的灰色节点,则转到第二步;否则,转到第四步
  4. 第四步,所有为标记的节点(默认为白色)都是需要清理的对象
  • 根节点对象的确定?
  • 其实python的标记-清除机制与java的root搜素机制相似,归结起来就为:root节点不可达的节点即为需要清除的对象
分代收集机制:
  • 特点:
    • 分代技术是一种典型的以空间换时间的技术,总结起来为:对象存在的时间越长,就越不可能是垃圾,应该越少去收集
  • 分代机制:
    • python将对象分为三代:0、1、2
    • 每个代都有一个threashold来表示允许容纳的对象个数,默认情况下:0带为700,1和2代为10。当一代内的对象超过阈值时将触发垃圾收集
    • 0代将触发所有三代的收集;1代触发1、2代的垃圾收集;2代只触发自己的垃圾收集
  • 垃圾收集过程:
    1. 将触发的分代的所有对象用链表串接起来
    2. 确定根节点:依赖于有效引用(去除循环引用后的计数)
    3. 垃圾标记
    4. 垃圾回收
参考文献:
  • http://www.cnblogs.com/mingaixin/archive/2013/01/31/2886680.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值