2017-09-25 3 views

Répondre

1

Les seuils sont multiplicateurs par rapport à la génération précédente . De l'gc.set_threshold() documentation:

Afin de décider quand exécuter, le collecteur assure le suivi des allocations d'objet nombre et désaffectations depuis la dernière collection. Lorsque le nombre d'allocations moins le nombre de désallocations dépasse threshold0, la collecte commence. Initialement, seule la génération 0 est examinée. Si la génération 0 a été examiné plus de threshold1 fois depuis la génération 1 a été examiné, puis la génération 1 est également examiné. De même, threshold2 contrôle le nombre de collections de génération 1 avant de collecter la génération 2.

Gras emphase mien.

donc la génération 1 est exécuté que si la génération 0 a été exécuté 10 fois. Puisque la génération 0 ne s'exécute que tous les 700 cycles (delta de allocation - désallocation), cela signifie que la génération 1 est exécutée toutes les 10 * 700 == 7.000 cycles. La génération 2 est exécutée tous les 10 * 10 * 700 == 70.000 cycles.