python的gc包文档说明了有关gc.get_count()的信息:
gc.get_count()
Return the current collection counts as a tuple of (count0, count1, count2).
这是一个示例程序:
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())
这是输出:
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?
最佳答案
不幸的是,@ user10637953提供的答案和所引用的文章都是错误的。count0
是自上次垃圾回收以来发生的(跟踪的对象分配-释放)。
达到gen0阈值(默认值为700)后的某个时间,将发生gen0垃圾回收,并且count0
将重置。count1
是自上一个gen1集合以来的gen0集合数。达到阈值(默认为10)后,将发生gen1收集,并且count1
将重置。count2
是自上一个gen2集合以来的gen1集合数。达到阈值(也默认为10)时,将进行gen2收集,并且count2
将重置。
您可以通过运行gc.collect(gen)
轻松证明自己,并使用gc.get_threshold()
查看阈值。
有关更多信息,请参见official dev guide。