You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Optimize _PyObject_IS_GC in free-threaded build #114733
_PyObject_IS_GC() could be optimized in the nogil build. That function is a bit expensive since it has to check for tp_is_gc() and possibly call it. Now that all objects have ob_gc_bits, we could store the "IS GC" status as another bit there, when the object is allocated.
I think this might require a bit of refactoring, but worth doing eventually. At a glance:
_PyObject_GC_New() (and related functions) could initialize ob_gc_bits with the "IS GC" set
PyType_GenericAlloc() would also need to initialize ob_gc_bits with the "IS GC" set if the type is a GC type.
_Py_NewReference() requires some care. It. currently initializes ob_gc_bits to zero and it's used after "allocating" objects from freelists.
I will re-evaluate this optimization, my last year's experiment was not worth doing that.
Let's rewrite the patch and if it does not change signifacnt changes, lets' close the issue.
cc @mpage@nascheme
Benchmarks based on gc_collect and gc_traversal show this is too small a portion for optimization; I would like to close this issue and revisit later if we have to.
Activity
corona10 commentedon Oct 19, 2026
I will re-evaluate this optimization, my last year's experiment was not worth doing that.
Let's rewrite the patch and if it does not change signifacnt changes, lets' close the issue.
cc @mpage @nascheme
corona10 commentedon Oct 19, 2026
Let me get metrics first based on pyperformance.
corona10 commentedon Oct 19, 2026
sample_gc_collect.txt
sample_gc_traversal.txt
Benchmarks based on gc_collect and gc_traversal show this is too small a portion for optimization; I would like to close this issue and revisit later if we have to.