[Python-Dev] Lazily GC tracking tuples
Tim Peters
tim_one@email.msn.com
Wed, 8 May 2002 00:53:38 -0400
[Neil Schemenauer, on Daniel Dunbar's interesting tuple-untrack scheme]
> I'm not sure I like this approach. Slowing down PyTuple_SET_ITEM to
> optimize a micro-benchmark seems dubious. However, dropping the number
> of tracked objects by 50% _does_ seem worthwhile. Couldn't we get the
> same effect by checking and untracking the appropriate tuples after
> finishing a gen1 collection? Each tuple would be checked once and short
> lived tuples will probably not be checked at all.
I agree with Neil here. Do you really mean after a gen1 collection? Or
after a gen0 collection? Or before a gen2 collection <wink>? The
micro-optimizer in me would like to combine testing for "safe to untrack"
objects with the whole-list crawl being done anyway in update_refs() at the
start of a collection. Offhand I guess I'd do that at the start of a gen0
collection. If that untracks a tuple that was going to die soon anyway,
it's not really a waste of time, because untracking at the very start saves
the rest of the collection from crawling over it twice (subtract_refs won't
see it if it gets untracked, and ditto move_roots). So that seems a net
win. OTOH, it that decides a tuple isn't safe to untrack, and the tuple was
going to die soon anyway, it's an "extra" peek at the tuple guts. That's a
net loss. But I expect an overwhelming majority of tuples are safe to
untrack, so playing a frequent net win against an infrequent net loss seems
a net win.