gc —垃圾收集器界面


该模块提供了到可选垃圾收集器的接口。它提供了禁用收集器,调整收集频率以及设置调试选项的Function。它还提供对收集器找到但无法释放的无法访问对象的访问。由于收集器补充了已经在 Python 中使用的引用计数,因此如果您确定程序未创建引用循环,则可以禁用收集器。可以pass调用gc.disable()禁用自动收集。要调试泄漏的程序,请调用gc.set_debug(gc.DEBUG_LEAK)。请注意,这包括gc.DEBUG_SAVEALL,导致将垃圾收集的对象保存在 gc.garbage 中以进行检查。

gc模块提供以下Function:

每当运行完整集合或最高代(2)的集合时,都会清除为多种内置类型维护的空闲列表。由于特定的实现,尤其是float,并非所有空闲列表中的所有项目都可能被释放。

在 3.8 版中进行了更改:新的* generation *参数。

3.4 版的新Function。

GC 根据对象存活的收集扫描次数将其分为三代。新对象放置在最年轻的一代(第0代)中。如果对象在集合中幸存下来,则将其移入下一代。由于世代2是最古老的世代,因此该世代中的对象将在收集后保留在那里。为了确定何时运行,收集器会跟踪自上次收集以来的数字对象分配和释放。当分配数量减去取消分配数量超过* threshold0 时,收集开始。最初仅检查0世代。如果自检查世代1以来检查了世代0超过阈值 1 次以上,则也要检查世代1。类似地,* threshold2 *在收集世代2之前控制世代1的集合数。

请注意,可以在结果引用器中列出已被取消引用但处于循环中并且尚未被垃圾收集器收集的对象。要仅获取当前活动的对象,请在致电get_referrers()之前先致电collect()

使用get_referrers()返回的对象时必须小心,因为其中一些可能仍在构造中,因此处于暂时无效状态。避免将get_referrers()用于除调试以外的其他目的。

>>> gc.is_tracked(0)
False
>>> gc.is_tracked("a")
False
>>> gc.is_tracked([])
True
>>> gc.is_tracked({})
False
>>> gc.is_tracked({"a": 1})
False
>>> gc.is_tracked({"a": []})
True

3.1 版中的新Function。

3.7 版中的新Function。

3.7 版中的新Function。

3.7 版中的新Function。

为只读访问提供了以下变量(您可以更改值,但不能重新绑定它们):

如果设置了DEBUG_SAVEALL,则所有无法访问的对象将被添加到此列表中,而不是被释放。

在版本 3.2 中更改:如果此列表在interpreter shutdown处为非空,则发出ResourceWarning,默认情况下为静音。如果设置DEBUG_UNCOLLECTABLE,则还将打印所有无法收集的对象。

在版本 3.4 中进行了更改:在 PEP 442之后,具有del()方法的对象不再以gc.garbage结尾。

Note

“开始”:垃圾收集即将开始。

“停止”:垃圾收集已完成。

Note

“世代”:正在收集的最古老的世代。

“ collected”:当* phase *为“ stop”时,成功收集的对象数。

“ uncollectable”:当* phase *为“ stop”时,无法收集并放入garbage的对象数。

应用程序可以将自己的回调添加到此列表。主要用例是:

Note

收集有关垃圾收集的统计信息,例如收集多代数据的频率以及收集时间。

允许应用程序在出现在garbage中时识别并清除其自己的无法收集的类型。

版本 3.3 中的新Function。

提供以下常量供set_debug()使用:

在版本 3.2 中进行了更改:如果不为空,还请在interpreter shutdown处打印garbage列表的内容。

首页