首頁 >後端開發 >Python教學 >python的記憶體管理機制是什麼

python的記憶體管理機制是什麼

(*-*)浩
(*-*)浩原創
2019-06-26 16:16:196605瀏覽

語言的記憶體管理是語言設計的一個重要面向。它是決定語言表現的重要因素。無論是C語言的手動管理,或是Java的垃圾回收,都成為語言最重要的特徵。這裡以Python語言為例子,說明一門動態類型的、物件導向的語言的記憶體管理方式。

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn