为什么Python中的默认gc生成阈值设置为(700,10,10)

时间:2017-09-25 07:28:58

标签: python python-2.7 garbage-collection python-internals

为什么Python中的默认GC生成阈值设置为 (700, 10, 10) ;而后两个数字 10,10 是如此之小?

这样低的门槛会导致更多的收藏吗?

1 个答案:

答案 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次循环运行。