Python 3.14 garbage collection rigamarole
a day ago
- #Garbage Collection
- #Memory Management
- #Python
- Python 3.14 introduced incremental garbage collection, replacing generational GC, which reduces pause times but can increase memory usage.
- Due to memory pressure reports, the incremental GC was reverted in Python 3.14.5, reverting to the traditional generational GC.
- Reference counting in Python deallocates objects automatically, but fails with circular references, requiring garbage collection intervention.
- The incremental GC splits objects into young and old generations, collecting young and increments of old to reduce pauses.
- In best-case scenarios with heavy allocation, incremental GC reduces pause times significantly without extra memory use.
- In worst-case scenarios with cyclic garbage and large objects, incremental GC can lead to higher memory usage compared to traditional GC.
- Python's GC can be observed with callbacks to track deallocations and differentiate between reference counting and GC freeing.
- The GC thresholds differ between versions, with incremental GC having two generations (young and old) vs. three in traditional GC.
- Memory pressure issues and lack of user-selectable GC options led to reverting incremental GC, as it wasn't suitable for all workloads.