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() -- 返回永久代中对象数量
Python gc的更多相关文章
- 禁用 Python GC,Instagram 性能提升10%
通过关闭 Python 垃圾收集(GC)机制,该机制通过收集和释放未使用的数据来回收内存,Instagram 的运行效率提高了 10 %.是的,你没听错!通过禁用 GC,我们可以减少内存占用并提高 C ...
- python GC、分支、循环
内存管理 1.变量无须事先声明,也不需要指定类型 2.python编程中一般无须关心变量的存亡,一般也不用关心内存的管理 3.python使用引用计数记录所有对象的引用计数 当对象引用数变为0,他就可 ...
- 【转】如何拿到半数面试公司Offer——我的Python求职之路
原文地址 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容 ...
- 如何拿到半数面试公司Offer——我的Python求职之路
从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容易的找到了 ...
- python面试大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- python面试2
Python语言特性 1 Python的函数参数传递 看两个例子: 1 2 3 4 5 a = 1 def fun(a): a = 2 fun(a) print a # 1 1 2 ...
- python求职之路
自我介绍 这是一道送分题,万年不变的第一个问题.不过有些小伙伴可能没有太在意,其实这个问题已经在面试官心中决定了你的去留意向.自我介绍的主要结构:个人基本信息 + 基本技术构成 + 项目经验(具体项目 ...
- 如何拿到半数面试公司Offer——我的Python求职之路(转)
原文出处:http://www.cnblogs.com/Lands-ljk/p/5836492.html 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试 ...
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
随机推荐
- IDEA SVN消失
问题:idea 的 svn消失 1.右键项目文件时无subversion选项 2.启动选项栏无图标 解决办法: 方法1:菜单栏>CVS>Enabled Version Control In ...
- [Linux] 多进程网络编程监听一个端口
SO_REUSEPORT支持多个进程或者线程绑定到同一端口 每个进程可以自己创建socket.bind.listen.accept相同的地址和端口,各自是独立平等的.让多进程监听同一个端口,各个进程中 ...
- (办公)记事本_Linux常用的目录命令
参考尚硅谷的谷粒学院:http://www.gulixueyuan.com/course/300/task/7078/show#(免费看,课程很全面,用手机登录一下就行.) .[root@localh ...
- VS2017初学者如何打开右侧的解决方案资源管理器
- 【洛谷5492】[PKUWC2018] 随机算法(状压DP)
点此看题面 大致题意: 用随机算法求一张图的最大独立集:每次随机一个排列,从前到后枚举排列中的点,如果当前点加入点集中依然是独立集,就将当前点加入点集中,最终得到的点集就是最大独立集.求这个随机算法的 ...
- 对numpy.meshgrid()理解
一句话解释numpy.meshgrid()——生成网格点坐标矩阵.关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼?看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵, ...
- ETCD:系统限制
原文地址:System limits 请求大小限制 etcd被设计用来处理小键值对典型的如元数据.较大的请求数据也起作用,但可能会增加其他请求的延迟.默认情况下,任意的请求最大的空间为1.5MiB,这 ...
- Thymeleaf实现页面静态化
如果用户所有的请求,都需要Thyleaf渲染后直接返回给用户,后台就存在大量的查询操作,数据库的压力就会骤然上升,请求的时间就会延长,带来极不好用户体验,现在市面上流行的就是页面的静态化处理,下面就来 ...
- ubuntu18.04 安装 搜狗输入法
一.安装fcitx sudo apt-get install fcitx-bin 因为搜狗拼音依赖fcitx,相关的依赖库和框架都会自动安装上. sudo apt-get install fcitx- ...
- Mysql将日期转为字符串
select date_format(time, '%Y-%m-%d %H:%i:%s') from info # 2019-08-22 21:03:21