登录

会员权益

获取需求

查看名片

专属客服

尊贵标识

VIP低至1.5U/天

增量垃圾回收性能问题待解,Python 3.13正式版暂不加入

分享

支付動態

2024-10-07

由于性能因素,Python 3.13暂时不加入原订添加的增量垃圾回收(Incremental GC)功能,并维持原有设置以维持版本稳定性,待改进并收集更多回馈后于Python 3.14回归

Python 3.13的增量垃圾回收(Incremental GC)功能存在性能问题,导致包括Sphinx等多种工具运作性能下降。内核开发者在讨论了增量垃圾回收阈值调整,以及退回增量垃圾回收功能的可能性后,决定暂时不在Python 3.13加入该功能,并且维持现有阈值设置,确保性能稳定。增量垃圾回收预计会在改进并且收集更多开发者回馈后,添加到Python 3.14中。

垃圾回收是编程语言中一项内存管理机制,用于自动清理不再使用的对象,释放内存空间。原本开发团队想在Python 3.13的时候添加增量垃圾回收功能,目的是优化内存管理,减少应用程序在运行时,因为垃圾回收而发生的卡顿,特别是针对大型应用程序或是需要高回应性的系统,以达到更加平滑顺畅的性能表现。

传统垃圾回收机制会在一定时间点暂停程序部分运作,清理未使用的内存,而该过程可能导致应用程序卡顿,而增量垃圾回收则是将垃圾回收过程拆分成多个较小的步骤,逐步进行清理,进而缩短每次停顿的时间,使得应用程序的回应性更好。

Python垃圾回收采用分代回收策略,主要分为三个世代,第0代、第1代和第2代。根据对程序内存分配行为的观察,通常很快变成垃圾的新对象被标为第0代,第1代则是由第0代经过垃圾回收后仍存活的对象晋升,当第1代内存对象触发垃圾回收,却还依然存活的对象,就会被标记为第2代。

而原本Python 3.13为了配合增量垃圾回收功能,第0代的阈值从700增加到了2,000,以降低频繁垃圾回收带来的额外开销。不过,增量垃圾回收的性能在测试阶段就受到开发者的注意,尤其是像Sphinx这类大型应用程序,在Python 3.13上甚至出现接近40%的性能下降。

经过Python内核开发者的讨论,他们认为增量垃圾回收虽然普遍可以减少垃圾回收的卡顿时间,提升应用程序的回应性,但是在部分情境下却反而会增加额外的内存和计算成本开销,以至于无法达到预期的性能提升效果。

在核心开发者讨论各种方案后取得共识,认为增量垃圾回收功能尚未成熟,阈值的调整需要更广泛的场景测试,因此最终从Python 3.13正式版移除增量垃圾回收,并维持原本设置确保版本的稳定性。开发团队将在收集更多回馈,厘清不同场景应用的性能表现后,在Python 3.14重新引入增量垃圾回收功能。

免责声明:
详情

Please Play Responsibly:

Casino Games Disclosure: Select casinos are licensed by the Malta Gaming Authority. 18+