python中的GC机制

和java一样 python也有垃圾自动回收机制,但实现方法与java并不相同
python中以引用计数为主,零代为辅

1 引用计数机制

python里每一个东西都是对象,它们的核心就是一个结构体:PyObject

typedef struct_object {
    int ob_refcnt;
    struct_typeobject *ob_type;
} PyObject;

PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少
如果一个对象的引用数量降为0,会立即释放占用的内存

引用计数机制的优点:
- 简单
- 实时性 即一旦没有引用,内存就直接释放了。不用像其他机制等到特定时机。实时性还带来一个好处:处理回收内存的时间分摊到了平时。

引用计数机制的缺点:
- 维护引用计数消耗资源,在对象内部保留一小部分空间用以存储引用数,同时在操作大量数据时不得不耗费精力处理每个对象的引用数
- 引用计数不能处理环形数据结构–也就是含有循环引用的数据结构。

第一个缺点在当前硬件条件下并不明显,但第二个在某些情况下却是致命危险,可能引起内存泄露,所以python又引入了标记清除和分代回收

2 孤立引用环

了解不多,日后填写

3 分代回收

也叫零代回收(Generation Zero)或隔代回收,基本思想是 大部分对象生命期很短,对年轻代和老年代使用不同的算法可以提高效率。 新创建出来的对象放在零代链表上,经过一段时间后gc检测零代链表中是否有循环引用,有则引用计数减1,当引用计数为0时释放内存,大于0且没有循环引用之后会将对象放入一代链表,再经过一段时间后检查一代放入三代。这就是新生代和老年代

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值