gpt4 book ai didi

python - Python 垃圾何时收集?

转载 作者:行者123 更新时间:2023-11-28 21:20:12 25 4
gpt4 key购买 nike

如果我的理解是正确的,在 CPython 中,一旦引用计数达到零,对象就会被删除。如果您有无法访问的引用循环,则该逻辑将不起作用,但有时解释器会尝试找到它们并删除它们(您可以通过调用 gc.collect() 手动执行此操作)。

我的问题是,这些解释器触发的循环收集步骤何时发生?什么样的事件会触发它们?

我对 CPython 的情况更感兴趣,但很想知道这在 PyPy 或其他 python 实现中有何不同。

最佳答案

GC 根据自上次 GC 运行以来发生的分配和释放次数(之间的增量)定期运行。

参见 gc.set_threshold() function :

In order to decide when to run, the collector keeps track of the number object allocations and deallocations since the last collection. When the number of allocations minus the number of deallocations exceeds threshold0, collection starts.

您可以使用 gc.get_count() 访问当前计数;这将返回 3 个计数 GC 轨道的元组(其他 2 个用于确定何时运行更深层次的扫描)。

PyPy 垃圾收集器的运行方式完全不同,因为 PyPy 中的 GC 进程负责所有 释放,而不仅仅是循环引用。此外,PyPy 垃圾收集器可插入,这意味着它运行的频率取决于您选择的 GC 选项。例如,当低于内存阈值时,默认的 Minimark 策略甚至根本不会运行。

参见 RPython toolchain Garbage Collector documentation有关其策略的一些详细信息,以及 Minimark configuration options有关可以调整的内容的更多提示。

Jython 或 IronPython 同上;这些实现依赖于主机运行时(Java 和 .NET)来为它们处理垃圾回收。

关于python - Python 垃圾何时收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com