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. Unity容器<1>

    参考地址: https://docs.microsoft.com/en-us/previous-versions/msp-n-p/dn170416(v=pandp.10) 总览 Unity是一个轻量级 ...

  2. 微服务-Springboot+Redis缓存管理接口代码实现

    废话少说,上代码,结合代码讲解: 一.创建maven工程:导入依赖: <packaging>war</packaging><!--修改jdk的版本--><pr ...

  3. nodejs环境使用Typeorm连接查询Oracle

    首先是typeorm的官方地址, 国内有人翻了中文版,不保证时效性 ·通过npm安装下列包: typeorm //typeorm连接数据库 @types/node //类型系统 typescript ...

  4. arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...

  5. Owhat sign参数分析

    需求:Owath进行商品购买时,psot提交的参数,有个sign,分析生成的算法. 1)点击商品购买后,进行抓包. 2)搜索sign定位赋值函数,OWAPIParamsDict paramsDictW ...

  6. 解决:target overrides the `GCC_PREPROCESSOR_DEFINITIONS`

    [!] Please close any current Xcode sessions and use `******.xcworkspace` for this project from now o ...

  7. 023.[转] 尚硅谷_Maven笔记

  8. 使用gitolite搭建Git服务器

    使用gitolite搭建Git服务器 运行环境 Ubuntu18.04 gitolite 搭建过程 安装好Ubuntu18.04系统 更新系统 sudo apt update sudo apt upg ...

  9. [Go] 轻量服务器框架tcp的粘包问题 封包与拆包

    tcp传输的数据是以流的形式传输的,因此就没有办法判断到哪里结束算是自己的一个消息,这样就会出现粘包问题,多个包粘在一起了 可以使用这样一个自定义的形式来解决,一个消息分为 head+body  he ...

  10. springioc之依赖注入

    1.1.2  IoC能做什么 IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类 ...