Python對記憶體的管理要從三個方面來說
物件的參考機制
Pyhton的內部使用參考計數,來保持記憶體中的物件,所有物件都有參考計數,
參考計數增加:
一個物件分配一個新名稱
將其放入一個容器中(串列、元素或字典)
參考減少的情況
使用del陳述句將物件的別名顯式的銷毀
物件的一個別名被賦值給其他物件
物件從一個視窗物件中移除,或,視窗物件本身被銷毀
一個本地參考離開了它的作用域
注:獲取參考物件:通過sys.getrefcount( )函式獲取某個參考的參考數,函式引數實際上創建了一個臨時的參考,因此,getrefcount( )所得到的結果,會比期望多1,
垃圾回收
當一個物件的參考計數歸零時,它將被垃圾回識訓制處理掉,
python的自動垃圾回收
當分配物件的次數和取消分配物件的次數的差值高于某個閾值時,垃圾回收才會啟動,
分代回收
python分代回識訓本策略:Pyhton認為存活時間越久的物件,越不可能在后面的程式中變成垃圾,(在垃圾回收的程序中,減少“長壽”物件的掃描頻率),
1 Python將所有的物件分為0, 1, 2三代,所有新建的物件都是0代物件,
2 當某一代物件經歷過垃圾回收,依然存活,那么它就被歸入下一代物件,
3 每次垃圾回收啟動時,一定會掃描所有0代物件,如果0代物件經過一定次數 垃圾回收,那么就會啟動0代和1代的掃描清理,
4 當1代經歷一定次數的垃圾回收后,那么會啟動對0,1,2,即對所有物件進行掃描,
5 對于函式set_threshold(),回傳(700, 10, 10),700為分配物件和取消分配物件的差值,當差值大于700時,啟動垃圾回收;
6 每10次0代垃圾回收,會配合1次1代回收
記憶體池機制
Python的記憶體垃圾回識訓制,將不用的記憶體放到記憶體池而不是回傳給作業系統,
1 為了加速Python的執行效率,Python引入記憶體池機制,用于管理對小塊記憶體的管理和釋放,
對于所有小于256個位元組的物件都使用pymalloc實作的分配器;而大于這個長度的物件則使用系統的malloc,
2 對于Python物件,如整數、浮點數和List,都有其獨立的私有記憶體池,物件間不共享他們的記憶體池,如果你分配又釋放了大量的整數,用于快取這些整數的記憶體不能再分配給浮點數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/122694.html
標籤:Python
上一篇:Python背景關系管理器
下一篇:Python 快取
