python的垃圾回收机制

@python的垃圾回收机制

1.垃圾回收概述

python的垃圾回收机制有引用计数,标记清除和分代回收三种.
python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略

2.引用计数器

导致引用计数器+1的情况
1.对象被创建,例如p=Person()
2.对象被引用,例如p2 = p
3.对象被作为参数,传入到一个函数中,例如func§
4.对象作为一个元素,存储在容器中,例如list1=[p1,p2]
导致引用计数-1的情况
1.对象的别名被显示撤销,例如del p
2.对象的别名被赋予新的对象,例如p=Person()
3.一个对象离开它的作用域,例如f函数执行完毕时,func函数中的局部变量
4.对象所在的容器被销毁,或从容器中删除对象

3.循环引用问题

import gc
import time
gc.disable()

class Person():
pass

while True:

p1 = Person()
p2 = Person()

p1.friend = p2
p2.friend = p1

del p1
del p2

4.标记清除

设置 p1.friend = None 或者设置 p2.friend= None,取消循环引用

5.分代回收

遍历每个容器对象,找到其引用的对象,将被引用的对象计数器-1.
如果该对象的引用次数为1,则将被引用的对象计数器-1,会将该对象回收,这是第0代;
否则就把该对象放在第一代,然后定时再进行一次对象计数器-1,如果该对象还没有被回收就把该对象放在第二代,以此类推.

6.GC模块

#gc模块
import gc
import sys

class Person():
pass

#禁用GC
gc.disable()

#手动执行GC
gc.collect()

p = Person()
#获得对象的引用计数
print(sys.getrefcount§)

#得到GC阈值
print(gc.get_threshold())

#距离上一次一代垃圾检查,Python分配内存的数目减去释放内存的数目
print(gc.get_count())

#设置GC阈值
#gc.set_threshold()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值