首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python gc.get_count()返回的count0、count1和count2值是什么

Python gc.get_count()返回的count0、count1和count2值是什么
EN

Stack Overflow用户
提问于 2019-08-12 21:21:11
回答 2查看 775关注 0票数 6

python的gc包的文档中提到了gc.get_count():

代码语言:javascript
复制
gc.get_count()
    Return the current collection counts as a tuple of (count0, count1, count2).

下面是一个示例程序:

代码语言:javascript
复制
import gc


if __name__=="__main__":
    print("making some data")
    for k in range(10):
        root = [range(i,1000) for i in range(1,1000)]
    print("len(gc.get_objects):",len(gc.get_objects()))
    print("gc.get_stats:",gc.get_stats())
    print("gc.get_count:",gc.get_count())

下面是输出:

代码语言:javascript
复制
making some data
len(gc.get_objects): 7130
gc.get_stats: [{'collections': 16, 'collected': 99, 'uncollectable': 0}, {'collections': 1, 'collected': 0, 'uncollectable': 0}, {'collections': 0, 'collected': 0, 'uncollectable': 0}]
gc.get_count: (75, 5, 1)

显然,count0 = 75、count1=5和count2=1。

什么是count0、count1和count2?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-22 01:26:35

不幸的是,@user10637953给出的答案和参考的文章都是不正确的。

count0是自上次垃圾回收以来发生的(跟踪对象分配-释放)。

在达到gen0阈值(默认为700)后的一段时间,将发生gen0垃圾收集,并且count0将重置。

count1是自上次gen0集合以来的gen1集合数量。达到阈值(默认为10)时,将进行gen1收集,并重置count1

count2是自上次gen1集合以来的gen2集合数量。当达到阈值(也是默认设置为10 )时,将进行gen2收集,并且count2将重置。

您可以通过运行gc.collect(gen)来轻松地证明这一点,并使用gc.get_threshold()查看阈值。

有关更多信息,请参阅official dev guide

票数 1
EN

Stack Overflow用户

发布于 2019-08-12 22:14:34

gc包中的'gc‘指的是’垃圾回收‘。它是一组动手方法,通过这些方法,您可以接管系统中的垃圾收集职责。这样做可以释放资源并简化程序执行的效率。但应该注意的是,系统垃圾收集管理已经相当不错了。是的,系统为您创建和引用的每个变量创建了一堆对象和其他开销,是的,这些开销可能会持续很长一段时间(即使您调用了del命令),但总体上它没有什么坏处。

gc.get_count()返回一个元组,表示系统保留的对象引用的内部内务计数。通过这些计数,系统将知道何时可以(自动)收集垃圾。

元组的三个值中的每个值表示三代中的对象(引用)。Python总共保留了三代的列表。每当一个对象在垃圾回收事件中幸存下来时,它就会被上移到下一代。( 75,5,1)表示最新一代中有75个对象,中间一代中有5个对象,最老一代中有1个对象。

计数是内部系统值,而不是您分配的或(大部分)直接控制的值。您可以使用gc.collect()重置一些值,从而释放大量资源;还可以使用gc.get_threshold()和gc.set_threshold()设置系统用来触发垃圾收集事件的触发器值。但是对于除了最核心的程序员和开发人员(我当然不是其中之一)之外的所有人来说,垃圾收集最好留给python系统来处理。

这能回答这个问题吗?

致谢:关于gc.get_count()方法的信息来自stactify.com/python-垃圾收集/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57462037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档