为什么Python中的默认GC生成阈值设置为 (700, 10, 10) ;而后两个数字 10,10 是如此之小?
这样低的门槛会导致更多的收藏吗?
答案 0 :(得分:2)
相对于上一代,阈值为乘数。来自gc.set_threshold()
documentation:
为了决定何时运行,收集器会跟踪自上次收集以来的对象分配和解除分配的数量。当分配数减去解除分配数超过
threshold0
时,收集开始。最初只检查生成0
。 如果检查生成0
超过threshold1
次,因为检查了生成1
,那么也会检查生成1
。同样,threshold2
在收集代1
之前控制代2
的集合数。
大胆强调我的。
因此,如果第0代已运行10次,则仅运行第1代。由于第0代仅每700(分配 - 释放的增量)周期运行,这意味着第1代每10 * 700 == 7.000个周期运行一次。第2代每10 * 10 * 700 == 70.000次循环运行。