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() -- 返回永久代中对象数量

Python gc的更多相关文章

  1. 禁用 Python GC,Instagram 性能提升10%

    通过关闭 Python 垃圾收集(GC)机制,该机制通过收集和释放未使用的数据来回收内存,Instagram 的运行效率提高了 10 %.是的,你没听错!通过禁用 GC,我们可以减少内存占用并提高 C ...

  2. python GC、分支、循环

    内存管理 1.变量无须事先声明,也不需要指定类型 2.python编程中一般无须关心变量的存亡,一般也不用关心内存的管理 3.python使用引用计数记录所有对象的引用计数 当对象引用数变为0,他就可 ...

  3. 【转】如何拿到半数面试公司Offer——我的Python求职之路

    原文地址 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容 ...

  4. 如何拿到半数面试公司Offer——我的Python求职之路

    从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容易的找到了 ...

  5. python面试大全

    问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...

  6. python面试2

    Python语言特性 1 Python的函数参数传递 看两个例子:     1 2 3 4 5 a = 1 def fun(a):     a = 2 fun(a) print a  # 1 1 2 ...

  7. python求职之路

    自我介绍 这是一道送分题,万年不变的第一个问题.不过有些小伙伴可能没有太在意,其实这个问题已经在面试官心中决定了你的去留意向.自我介绍的主要结构:个人基本信息 + 基本技术构成 + 项目经验(具体项目 ...

  8. 如何拿到半数面试公司Offer——我的Python求职之路(转)

    原文出处:http://www.cnblogs.com/Lands-ljk/p/5836492.html 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试 ...

  9. python公司面试题集锦 python面试题大全

    问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...

随机推荐

  1. 红黑树原理详解及golang实现

    目录 红黑树原理详解及golang实现 二叉查找树 性质 红黑树 性质 operation 红黑树的插入 golang实现 类型定义 leftRotate RightRotate Item Inter ...

  2. ASP.NET底层原理

    上图基本上演示了IIS 6整个处理过程.在User Mode下,http.sys接收到一个基于aspx的http request,然后它会根据IIS中的Metabase查看该基于该Request的Ap ...

  3. Android五大布局详解——FrameLayout(帧布局)

    FrameLayout 这个布局相对前面两节介绍的布局就简单了很多,因此它的应用场景也就特别的少.这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角.新建UILayoutTestThre ...

  4. CODING 2.0:为什么我们需要 DevOps

    CODING 在前两天的 Kubecon 2019 大会上发布了 CODING 2.0.这背后是 CODING 对研发管理和研发团队组建的思考.从 CODING 成立以来,我们一直在探索"让 ...

  5. GithubPages+Hexo博客搭建记录

    目录 前言 安装Node.js 安装Git 安装Hexo 查看效果 建立Github Pages 注册Github帐户 建立托管博客的仓库 制作SSH密钥 添加公钥到Github 测试连接 把本地的博 ...

  6. 基于django的个人博客网站建立(四)

    基于django的个人博客网站建立(四) 前言 网站效果可点击这里访问 今天主要添加了留言与评论在后台的管理和主页文章的分页显示,文章类别的具体展示以及之前预留链接的补充 主要内容 其实今天的内容和前 ...

  7. (转)Ioc控制反转和依赖注入

    转载地址:https://zhuanlan.zhihu.com/p/95869440 控制反转控制反转(Inversion of Control,简称IoC),是面向对象编程中的一种设计思想,其作用是 ...

  8. volatile可见性案例-黑马

    volatile可见性案例-黑马 package com.mozq.demo.demo; class Task implements Runnable{ //public boolean flag = ...

  9. HTML中跨域请求天气粗略效果

    HTML中跨域请求天气粗略效果 html+css部分: <style> table{ border:1px red solid; border-collapse: collapse; ma ...

  10. 如何使用1行代码让你的C++程序控制台输出彩色log信息

    本文首发于个人博客https://kezunlin.me/post/a201e11b/,欢迎阅读最新内容! colorwheel for colored print and trace for cpp ...