CPython核心开发团队调整了Python 3.14与Python 3.15的垃圾回收器(GC)路线,决定将Python 3.14.0至3.14.4采用的增量式垃圾回收(Incremental GC)改回Python 3.13原有的分代式设计(Generational GC)。该变更已纳入5月10日发布的Python 3.14.5,Python 3.15也将采用相同方案。主要原因是部分生产环境反馈,新设计虽然有助于降低最大GC暂停时间,但可能导致内存压力上升。
此次调整涉及CPython运行时的内存管理机制。Python通常会记录每个对象的引用计数,当对象不再被引用时,即可释放内存。然而,部分对象会相互引用,即使程序已不再需要它们,引用计数仍未必归零。垃圾回收机制正是用于处理这类循环引用,避免内存被无用对象占用。
Python 3.14原本引入的增量式GC,是将垃圾回收工作拆分为较小批次执行,目标是减少一次性清理大量对象时造成的程序暂停。对于对象数量庞大的程序,这种设计可降低单次暂停时间,使程序运行更流畅。
但核心开发者在讨论中指出,这一设计在降低暂停时间的同时,也改变了循环垃圾被回收的时机。部分应用在升级到Python 3.14后,出现内存使用量明显增加,或更容易触及内存限制的问题。对于生产环境、CI环境或资源受限的服务器而言,内存使用过高通常比短暂暂停更容易引发运维问题。
因此,CPython团队决定暂时回归Python 3.13的分代式GC。分代式设计根据对象存活时间划分不同代,优先回收更可能成为垃圾的新对象,这是CPython长期采用的策略。相比增量式GC,旧设计在特定场景下可能带来更明显的GC暂停,但其行为更可预测,也更符合以往版本的内存表现。
该调整在Python 3.15仍处于开发阶段时加入,争议较小;但Python 3.14已正式发布,因此在3.14.5维护版本中回退底层GC设计,属于较为罕见的变更。核心开发者在讨论中也提到,若未来要重新引入增量式GC,可能需经过PEP流程,并在性能、内存占用与兼容性风险方面进行更全面的评估,而非直接沿用Python 3.14早期版本的实现。