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生成完整CPython文件的情境,在Python 3.13上便出現接近40%的效能下降。

經過Python核心開發者的討論,他們認為增量垃圾回收雖然普遍可以減少垃圾回收的卡頓時間,提升應用程式的回應性,但是在部分情境下卻反而會增加額外的記憶體和計算成本開銷,以至於無法達到預期的效能提升效果。

在核心開發者討論各種方案後取得共識,認為增量垃圾回收功能尚未成熟,閾值的調整需要更廣泛的場景測試,因此最終從Python 3.13正式版移除增量垃圾回收,並維持原本設定確保版本的穩定性。開發團隊將在收集更多回饋,釐清不同場景應用的效能表現後,在Python 3.14重新引入增量垃圾回收功能。

熱門新聞

Advertisement