語言的記憶體管理是語言設計的一個重要面向。它是決定語言表現的重要因素。無論是C語言的手動管理,或是Java的垃圾回收,都成為語言最重要的特徵。這裡以Python語言為例子,說明一門動態類型的、物件導向的語言的記憶體管理方式。
一句話概括:引用計數為主,清除標記,分代回收為輔(推薦學習:Python視頻教程)
python的垃圾回收(3種)
引用計數
當對象的引用的計數器變成0的時候,該物件可能在記憶體中,但是已經不能存取。 python的垃圾回收時候不能做其他操作,如果一個對象的引用計數變為0的時候python就去回收該對象,那麼很顯然Python的效率會很差,那什麼時候python會來回收呢?這是一個好問題。
python會監聽自己new了多少個新的物件和有多少物件的引用計數器變成0了,兩個數值做差的到的數和閾值去比較,大於閾值,記憶體開始進行垃圾回收,銷毀引用計數器為0的物件。
優點:簡單即時性,缺點:維護引用計數消耗資源,循環引用。
分代回收
為了提高效率,有很多對象,清理了很多次他依然存在,可以認為,這樣的對像不需要經常回收,可以把它分到不同的集合,每個集合回收的時間間隔不同。簡單的說這就是python的分代回收。
具體說一下,python中的垃圾分為1,2,3代,在1代裡的對象每次回收都會去清理,當清理後有引用的對象依然存在,此時他會進入2代集合,同理2代集合清理的時候存在的物件會進入2代集合。
每個集合的清理時間如何分配,會先清理1代垃圾,當清理10次一代垃圾後會清理一次2代垃圾,當清理10次2代垃圾後會清理2代垃圾。
標記清除
按需分配,當記憶體不夠的時候,從暫存器和程式堆疊上的參考出發,遍歷對象,將遍歷的物件打上標記,然後在記憶體中清除沒有標記的物件。
更多Python相關技術文章,請造訪Python教學欄位學習!
以上是python的記憶體管理機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!