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. How to: Map a Persistent Class to a Database View Which Has No Key Field如何:映射持久化类到无主键数据库视图

    With XAF, you can build new applications from scratch or maintain existing databases. The How to: Ge ...

  2. 12-Factor与微服务

           为了构建分布式微服务程序,能够部署到所有云服务,Heroku工程师总结所有云原生应用程序的12要素: 1.基准代码 Single codebase: The application mu ...

  3. [PHP] 编译安装swoole

    不知道为啥,家里的网访问不了pecl.php.net,这也就没有办法直接使用pecl install swoole安装swoole,也可以直接进行编译安装 在git仓库下载源码 https://git ...

  4. java之对象创建时各成员变量的初始值

    除了byte short int long float double char bollean这基础类型外,其余的都是引用类型 成员变量类型 初始值 byte 0 short 0 int 0 long ...

  5. 关于Excel做表小知识记录

    关于Excel做表小知识记录 最近使用Excel做了一系列的报表,觉得这是个很神奇的东西哈哈哈,以前我可是一想到Excel就开始头疼的人...  能用代码或者SQL语句解决的问题绝不会愿意留在Exce ...

  6. 搞定vscode编写java(手把手篇)

    1: 下载VSCODE 本来我写过一个 vscode 编写java 帖子,但是 还是很多人私信我,下面写一个手把手教程 原文地址: https://www.cnblogs.com/dgwblog/p/ ...

  7. NFS深度解析及搭建同步NFS服务

    1.nfs 进程 [root@nfsserver ~]# ps -ef|egrep "nfs|rpc" rpcuser : ? :: rpc.statd -->检查文件一致性 ...

  8. 汇总:ASP.NET Core中HttpContext获取传参数据,有哪些方式

    一.原生方式: 1.POST(以ajax请求为案例,教大家用法) $.ajax({ type: "post", dataType: "json", cache: ...

  9. C# 使用WM_COPYDATA传输数据(两个窗体间通信)

    //发送方 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  10. jvm虚拟机笔记<一> 内存区域

    运行时数据区域: 程序计数器:字节码的行号指示器. 虚拟机栈:为每个方法创建一个栈帧(存放方法中的局部变量,变量引用等). 本地方法栈:存放本地方法. ------------------------ ...