Python是如何進行記憶體管理-記憶體池機制Pymalloc
阿新 • • 發佈:2019-02-18
Python引用了一個記憶體池(memory pool)機制,即Pymalloc機制(malloc:n.分配記憶體),用於對小塊記憶體的申請和釋放管理
- 記憶體池(memory pool)的概念:
當建立大量消耗小記憶體的物件時,頻繁呼叫new/malloc會導致大量的記憶體碎片,致使效率降低。記憶體池的概念就是預先在記憶體中申請一定數量的,大小相等的記憶體塊留作備用,當有新的記憶體需求時,就先從記憶體池中分配記憶體給這個需求,不夠了之後再申請新的記憶體。這樣做最顯著的優勢就是能夠減少記憶體碎片,提升效率。
記憶體池的實現方式有很多,效能和適用範圍也不一樣。
- Python中的記憶體管理機制——Pymalloc:
python中的記憶體管理機制都有兩套實現
- 一套是針對小物件,就是大小小於256bits時,pymalloc會在記憶體池中申請記憶體空間;
- 當大於256bits,則會直接執行 new/malloc 的行為來申請新的記憶體空間。
記憶體釋放
關於釋放記憶體方面,當一個物件的引用計數變為 0 時,python就會呼叫它的解構函式。呼叫解構函式並不意味著最終一定會呼叫free 釋放記憶體空間,如果真是這樣的話,那頻繁地申請、釋放記憶體空間會使 Python的執行效率大打折扣。因此在析構時也採用了記憶體池機制,從記憶體池申請到的記憶體會被歸還到記憶體池中,以避免頻繁地 釋放 動作。