Python是如何進行記憶體管理

2022-07-16 20:51:13 字數 922 閱讀 2721

三個方面:一物件的引用計數機制,二垃圾**機制,三記憶體池機制

一、物件的引用計數機制

python內部使用引用計數,來保持追蹤記憶體中的物件,所有物件都有引用計數。

引用計數增加的情況:

1,乙個物件分配乙個新名稱

2,將其放入乙個容器中(如列表、元組或字典)

引用計數減少的情況:

1,使用del語句對物件別名顯示的銷毀

2,引用超出作用域或被重新賦值

sys.getrefcount( )函式可以獲得物件的當前引用計數

多數情況下,引用計數比你猜測得要大得多。對於不可變資料(如數字和字串),直譯器會在程式的不同部分共享記憶體,以便節約記憶體。

二、垃圾**

1,當乙個物件的引用計數歸零時,它將被垃圾收集機制處理掉。

2,當兩個物件a和b相互引用時,del語句可以減少a和b的引用計數,並銷毀用於引用底層物件的名稱。然而由於每個物件都包含乙個對其他物件的應用,因此引用計數不會歸零,物件也不會銷毀。(從而導致記憶體洩露)。為解決這一問題,直譯器會定期執行乙個迴圈檢測器,搜尋不可訪問物件的迴圈並刪除它們。

三、記憶體池機制

python提供了對記憶體的垃圾收集機制,但是它將不用的記憶體放到記憶體池而不是返回給作業系統。

1,pymalloc機制。為了加速python的執行效率,python引入了乙個記憶體池機制,用於管理對小塊記憶體的申請和釋放。

2,python中所有小於256個位元組的物件都使用pymalloc實現的分配器,而大的物件則使用系統的malloc。

3,對於python物件,如整數,浮點數和list,都有其獨立的私有記憶體池,物件間不共享他們的記憶體池。也就是說如果你分配又釋放了大量的整數,用於快取這些整數的記憶體就不能再分配給浮點數。

python是如何進行記憶體管理的

一 python記憶體管理 這個問題需要從三個方面來說 1 物件的引用計數機制 四增五減 2 垃圾 機制 手動自動,分代 3 記憶體池機制 大m小p 1 物件的引用計數機制 要保持追蹤記憶體中的物件,python使用了引用計數這一簡單的技術。sys.getrefcount a 可以檢視a物件的引用計...

Python是如何進行記憶體管理的?

python引用了乙個記憶體池 memory pool 機制,即pymalloc機制 malloc n.分配記憶體 用於管理對小塊記憶體的申請和釋放 記憶體池 memory pool 的概念 當 建立大量消耗小記憶體的物件時,頻繁呼叫new malloc會導致大量的記憶體碎片,致使效率降低。記憶體池...

python是如何進行記憶體管理的

python引入了乙個機制 引用計數。python內部使用引用計數,來保持追蹤記憶體中的物件,python內部記錄了物件有多少個引用,即引用計數,當物件被建立時就建立了乙個引用計數,當物件不再需要時,這個物件的引用計數為0時,它被垃圾 總結一下物件會在一下情況下引用計數加1 1.物件被建立 x 4 ...