• Python gc


    Python gc

    Python gc 模块提供垃圾回收器的接口
    关于 Python 垃圾回收 <- 点击查看
    官方文档:https://docs.python.org/3/library/gc.html?highlight=gc

    enable & disable

    enable() -- 开启自动垃圾回收
    disable() -- 关闭自动垃圾回收
    isenabled() -- 查看是否开启自动垃圾回收

    collect

    collect() -- 立刻进行全部垃圾回收
    可以传入 int 指定对前几代链表进行垃圾回收 (只能为 0、1、2,否则会报错)
    返回 unreachable 对象数量

    get_count

    get_count() -- 返回垃圾回收计数器,表示每层链表计数分别是多少

    get_stats

    get_stats() -- 返回一个包含每代链表状态的字典
    {'collections': 链表被回收次数, 'collected': 被回收对象个数, 'uncollectable': 无法回收的对象数}

    debug

    set_debug() -- 设置垃圾回收器的调试标识位,调试信息会被写入 sys.stderr
    get_debug() -- 获取垃圾回收器的调试标识位

    传入的整数会被转换成二进制,对应的位开启对应的调试:
    1: DEBUG_STATS - 在回收完成后打印统计信息。当回收频率设置较高时,这些信息会比较有用
    2: DEBUG_COLLECTABLE - 当发现可回收对象时打印信息
    4: DEBUG_UNCOLLECTABLE - 打印找到的不可回收对象的信息(指不能被回收器回收的不可达对象)。这些对象会被添加到 garbage 列表中
    8: DEBUG_SAVEALL - 设置后,所有回收器找到的不可达对象会被添加进 garbage 而不是直接被释放。这在调试一个内存泄漏的程序时会很有用
    16: DEBUG_LEAK - 调试内存泄漏的程序时,使回收器打印信息的调试标识位 (等价于除了 DEBUG_STATS 外的其他 3 个)

    threshold

    set_threshold(threshold0[, threshold1[, threshold2]]) -- 设置自动执行垃圾回收的阈值
    get_threshold() -- 获取自动执行垃圾回收的阈值

    当回收阈值为 0 时,会禁用回收
    当分配对象的数量减去释放对象的数量大于阈值 threshold0 时,对第零代启动垃圾回收
    当上一次第一代回收之后,第零代的回收次数大于阈值 threshold1 时,对第一代进行垃圾回收
    当上一次第二代回收之后,第一代的回收次数大于阈值 threshold2 时,对第二代进行垃圾回收

    track

    get_objects(generation=None) -- 返回一个被收集器追踪的对象列表
    is_tracked() -- 该对象是否被追踪,一般原子类的实例不会被追踪,而非原子类(如容器、用户自定义的对象)会被追踪

    示例:

    import gc
    
    print(gc.is_tracked(0))
    print(gc.is_tracked('a'))
    print(gc.is_tracked(list()))
    print(gc.is_tracked(dict()))
    print(gc.is_tracked({'a': 1}))
    print(gc.is_tracked({'a': []}))
    

    输出结果:

    False
    False
    True
    False
    False
    True
    

    refer

    get_referrers() -- 返回一个包含直接引用该对象的对象的列表,只有支持垃圾回收的容器 (已经解除占用,但在循环引用中并未被回收的对象仍然会出现,可以先 collect())
    get_referents() -- 返回一个包含该对象引用对象的列表

    freeze

    freeze() -- 冻结所有追踪的对象,移至永久代并忽略以后的回收
    unfreeze() -- 解冻所有对象,并将它们放到年老代中
    get_freeze_count() -- 返回永久代中对象数量

  • 相关阅读:
    模拟乒乓球双打和单打比赛
    关于zip内置函数的应用及在 Python 2 和 3 的不同之处
    计算文本平均列数
    四则运算
    Python跳一跳小游戏
    数据库
    类和正则表达
    带进度条的圆周率计算
    球队预测
    自己的第一个网页
  • 原文地址:https://www.cnblogs.com/dbf-/p/11949807.html
Copyright © 2020-2023  润新知