python垃圾回收

# python 中垃圾回收机制:
#   引用计数为主,分代回收为辅的机制
#       引用计数:将程序运行中创建的对象都分配一个计数器,统计该对象被引用的次数
#           不同类型的对象,在内存中存储的方式不一样:小整数(-5, 256),和单个字母是能被不同变量公用的对象,在内存中常驻;
                    # 单词或者说是没有空格的字符串,是共用对象,计数为0,便被销毁;带空格的字符串和长整数是不共用对象,计数为0时,
#                       便被销毁;
                    # 当指向大整数或字符串的变量被修改时,实际上是重新生成了一个对象,原对象若计数为0时,便被销毁。
#       分代回收:python在内存中有三条链表存储对象,分别称之为0代、1代和2代。每一次生成的对象先挂到0代上,当距离上次检查回收,python分
#           配内存的数目和回收内存的数目之差达到上限值(一般为700)时,会对0代进行一次遍历检查,即对0代上每一个对象进行循环引用检
#           发现存在互相引用关系的双方,就对它们的计数-1, 剩下的计数仍不为0的对象将其挂在1代链表上; 当对0代的检查次数到达一个上
#           限(一般为10)时, 便会对1代链表上的所有对象进行一次遍历检查, 将剩下的计数不为0的变量挂到2代链表上。

import gc
print(gc.get_count())       # 返回包含三个数的元组, 三个数分别代表python分配内存的数目和回收内存的数目之差, 处理0代对象
                            # 链表的次数,处理1代链表的次数

print(gc.get_threshold())   # 同样返回包含三个数的元组,分别代表get_count()得到的三个变量的上限。

运行结果:

(338, 2, 1)
(700, 10, 10)

def f():
    while True:
        a = A()
        b = A()
        a.t = b
        b.t = a
        del a
        del b

        # gc.collect()   # 开启一次垃圾回收

gc.disable()            # 关闭python后台垃圾回收功能

f()

有三种情况会触发垃圾回收:
1. 当gc模块中的计数器达到阀值的时候,自动回收垃圾
2. 当手动调用 gc.collect()的时候
3. 当程序退出时,python解释器来回收垃圾。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值