當前位置:
首頁 > 知識 > python如何進行內存管理

python如何進行內存管理

一、對象的引用計數機制

python內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數

引用計數增加的情況:

1. 一個對象分配一個新名稱

2. 將其放入一個容器中

引用計數減少的情況:

1. 使用del語句對對象別名顯示的銷毀

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

sys.getrefcount()函數可以獲得對象的當前引用計數

多數情況下,引用計數比你猜測的要大得多。對於不可變數據(如數字和字元串),解釋器會在程序的不同部分共享內存,以便節約內存。

二、垃圾回收

當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。當兩個對象a 和b 相互引用時,del語句可以減少a和b的引用次數,並銷毀用於引用底層對象的名稱。然而由於每個對象都包含一個對其他對象的應用,因此引用計數不會歸零,對象也不會銷毀。(從而導致內存泄漏)。為解決這一問題,解釋器會定期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。

三、內存池機制

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

1. Pymalloc機制。為了加速python的執行效率,python引入了一個內存池機制,用於管理對小塊內存的申請和釋放。

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

3. 對於python對象,如整數,浮點數和list,都有其獨立的私有內存池,對象間不共享它們的內存池。也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。

python如何進行內存管理

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

「設計模式專題」Singleton
short數組保存unicode編碼和unicode編碼轉換成shrot數組

TAG:程序員小新人學習 |