垃圾回收:引用计数与分代收集机制

当引计数为0时,该对象⽣命就结束了。

计数机制的优点:

1、简单

2、实时性:旦没有引,内存就直接释放了。不像其他机制等到特定时机。实时性还带来个好处:处理回收内存的时间分摊到了平时。

计数机制的缺点:

1、维护引计数

2、消耗资源循环引

list1    =   []

list2    =   []

list1.append(list2)

list2.append(list1)

list1list2相互引⽤,如果不存在其他对象对他们的引用list1list2的引用计数也仍然1,所占⽤的内存永远无法被回收这将是致命的。    对于如今的强⼤硬件,缺点1尚可接受,但是循环引导致内存泄露,注定python还将引⼊新的回收机制。(分代收集)

.垃圾回收机制

Python中的垃圾回收是以引用计数为主,分代收集为辅。

1、导致引用计数+1的情况

对象被创建,例如a=23      

 对象被引⽤,例如b=a   

对象被作为参数,传个函数中,例如func(a)       

对象作为⼀个元素,存储在容器中,例如list1=[a,a]   

2、导致引用计数-1的情况

对象的别名被显式销毁,例如del    a      

 对象的别名被赋予新的对象,例如a=24   

个对象离开它的作域,例如f函数执⾏完毕时,func函数中的局部变量(全局变量不会)   

对象所在的容器被销毁,或从容器中删除对象   

3、查看一个对象的引用计数

import    sys

a    =    "hello    world"

 sys.getrefcount(a)

可以查看a对象的引用计数,但是⽐正常计数1,因为调函数的时候传入a,这会让a的引用计数+1

 

4.有三种情况会触发垃圾回收:

  1. gc模块的计数器达到阀值的时候,自动回收垃圾
  2. gc.collect(),手动回收垃圾
  3. 程序退出的时候,python解释器来回收垃圾
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值