[Python-Dev] Calling the GC less often when there are lots of long-lived objects

Antoine Pitrou solipsis at pitrou.net
Wed Dec 17 23:02:10 CET 2008


Antoine Pitrou <solipsis <at> pitrou.net> writes:
> 
> We could let the user configure the threshold between the old policy and the 
new
> policy. Currently it is hard-wired to a value of 10000 (that is, 10000
> long-lived objects tracked by the GC).

I've removed the threshold in the latest patches because it didn't make much
sense when a few long-lived objects contained a lot of objects not tracked by
the GC.

Another improvement I've included in the latest patches (but which is
orthogonal to the algorithmic change) is that simple tuples and even simple
dicts are not tracked by the GC if they don't need to. A few examples
(gc.is_tracked() is a new function which returns True if an object is tracked
by the GC):

>>> import gc
>>> gc.is_tracked(())
False
>>> gc.is_tracked((1,2))
False
>>> gc.is_tracked((1,(2, "a", None)))
False
>>> gc.is_tracked((1,(2, "a", None, {})))
True

>>> d = {}
>>> gc.is_tracked(d)
False
>>> d[1,2] = 3,4
>>> gc.is_tracked(d)
False
>>> d[5] = None, "a", (1,2,3)
>>> gc.is_tracked(d)
False
>>> d[6] = {}
>>> gc.is_tracked(d)
True
>>> gc.is_tracked(d[6])
False

Regards

Antoine.




More information about the Python-Dev mailing list