Python內存管理機制

1.引用計數:

   1)python中的對象引用個數在內存都有保存;可以使用sys.getrefcount()獲得引用計數

2.垃圾回收機制:

    1)引用計數:引用計數也是一種垃圾收集機制,當某個對象的引用計數降爲0時,說明沒有任何引用指向該對象,該對象就成爲要被回收的垃圾了;

    2)標記清除:如果兩個對象的引用計數都爲1,但是僅僅存在他們之間的循環引用,那麼這兩個對象都是需要被回收的,也就是說,它們的引用計數雖然表現爲非0,但實際上有效的引用計數爲0。所以先將循環引用摘掉,就會得出這兩個對象的有效計數;在實際操作中,並不改動真實的引用計數,而是將集合中對象的引用計數複製一份副本,改動該對象引用的副本。對於副本做任何的改動,都不會影響到對象生命週期的維護;

    3)分代回收 :當某些內存塊M經過了3次垃圾收集的清洗之後還存活時,我們就將內存塊M劃到一個集合A中去,而新分配的內存都劃分到集合B中去。當垃圾收集開始工作時,大多數情況都只對集合B進行垃圾回收,而對集合A進行垃圾回收要隔相當長一段時間後才進行,這就使得垃圾收集機制需要處理的內存少了,效率自然就提高了。在這個過程中,集合B中的某些內存塊由於存活時間長而會被轉移到集合A中,當然,集合A中實際上也存在一些垃圾,這些垃圾的回收會因爲這種分代的機制而被延遲

3.內存池機制:

     1)Python在運行期間會大量地執行malloc(內存分配)和free(內存釋放)的操作,頻繁地在用戶態和內核態之間進行切換,這將嚴重影響Python的執行效率。爲了加速Python的執行效率,Python引入了一個內存池機制,用於管理對小塊內存的申請和釋放;Python內部默認的小塊內存與大塊內存的分界點定在256個字節,當申請的內存小於256字節時,PyObject_Malloc會在內存池中申請內存;當申請的內存大於256字節時,PyObject_Malloc的行爲將蛻化爲malloc的行爲。當然,通過修改Python源代碼,我們可以改變這個默認值,從而改變Python的默認內存管理行爲;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章