Skip to main content

CPython調整3.14與3.15版本增量式GC實作,改回3.13分代式GC設計

Posted in 業界新聞
新聞

這次調整涉及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流程,並在效能、記憶體用量與相容性風險上做更完整評估,而不是直接沿用3.14早期版本的實作。

View original 0 Likes 0 Boosts

Comments (0)

No comments yet.