Reverting the incremental GC in Python 3.14 and 3.15

· coding · Source ↗

TLDR

  • Python core devs are reverting the 3.14 incremental GC due to significant memory pressure in production, falling back to the generational GC from 3.13.

Key Takeaways

  • The incremental GC shipped in 3.14 without going through the PEP process, which contributed to insufficient pre-release evaluation.
  • Production memory pressure reports prompted the decision; a patch release (3.14.5) will ship the revert early, ahead of the planned 2026-06-09 date.
  • 3.15 is still in alpha, so the revert is straightforward there; an extra alpha 9 may be released if the fix lands within a week of the announcement.
  • Reintroducing the incremental GC for 3.16 is possible but must go through the formal PEP process and broader evaluation.
  • Maintaining two GCs simultaneously in 3.14 was ruled out as too costly and risky from a maintenance perspective.

Hacker News Comment Review

  • At least one production team confirmed continuous memory growth after upgrading to 3.14, eventually tracing it to reference cycles in aiohttp clients being recreated per request, not a true leak.
  • The missing PEP process was the sharpest criticism: commenters saw it as the root cause, not the revert itself, and expect stricter enforcement going forward.
  • Comparison to .NET’s GC iteration drew discussion; the consensus was that Microsoft’s internal dogfooding at scale provides telemetry that Python’s open process currently lacks.

Notable Comments

  • @simonw: clarifies that free-threading (no-GIL) uses a separate GC and is unrelated to this incremental GC revert.
  • @nas: httpx creates reference cycles that are a worst-case scenario for the incremental GC; a fix PR exists but is unmerged.
  • @nodesocket: the revert is being pushed via the python:3.14.5-slim-trixie container image for Docker users.

Original | Discuss on HN