天天看點

python的記憶體管理機制

參考了網上的一些部落格,連結如下:

https://www.cnblogs.com/geaozhang/p/7111961.html

這裡總結一下python的記憶體管理機制:

python利用“引用計數”實作一種較為簡單的“垃圾回收機制”,且掃描時使用“分代回收”提高掃描效率,且資源回收筒稱為“記憶體池”;

(1)引用計數:

簡而言之 ,就是在Python中,每個對象都有指向該對象的引用總數---引用計數,當某個對象的引用計數為0時,我們就可以考慮将其進行垃圾回收了;

(2)垃圾回收機制:

即是對上面的引用計數為0的對象進行回收,當然回收的時候采用了一個分代回收的機制,幫助提高掃描的效率。另外,Python中的垃圾回收不是直接釋放掉,而是将其回收到記憶體池中,以備下次使用;

(3)記憶體池:

垃圾資源回收筒,相當于一個金字塔結構,如下:

python的記憶體管理機制

第3層:最上層,使用者對Python對象的直接操作

第1層和第2層:記憶體池,有Python的接口函數PyMem_Malloc實作-----若請求配置設定的記憶體在1~256位元組之間就使用記憶體池管理系統進行配置設定,調用malloc函數配置設定記憶體,但是每次隻會配置設定一塊大小為256K的大塊記憶體,不會調用free函數釋放記憶體,将該記憶體塊留在記憶體池中以便下次使用。

第0層:大記憶體-----若請求配置設定的記憶體大于256K,malloc函數配置設定記憶體,free函數釋放記憶體。

第-1,-2層:作業系統進行操作

 注意:

python的這種引用計數還有一個問題就是“孤立引用環”的情況,如下:

python的記憶體管理機制
python的記憶體管理機制