Python的內存管理機制


Python是如何進行內存管理的?

 

 一、 Python 是動態類型語言,對象的類型和內存占用都是運行時確定的。

(變量無須事先聲明,無須指定類型,程序員不用管內存管理,變量名會被“回收”,del 語句能直接釋放資源)。Python 解釋器承擔了內存管理的復雜任務。

二、Python 解釋器通過以下三種方式來管理內存:

①對象的引用計數機制; ②垃圾回收機制;③內存池機制。

2.1 對象的引用計數機制

對象的引用計數增加:

對象被創建;或另外的別名被創建;或被作為參數傳遞給函數;或成為容器對象的一個元素。

對象的引用計數減少:

使用 del 語句對對象別名或對容器對象進行顯示銷毀時;引用超出作用域 或者對象的別名被賦值給其他對象時。

對於不可變數據,Python 解釋器會在程序的不同部分共享內存,以便節省內存。

2.2 垃圾回收機制

1.當一個對象的引用計數為 0 時,它將被垃圾收集器釋放內存。

2.特定情形會導致循環引用,如兩個對象 a,b 互相引用時,del 語句可以減少 a,b 的引用次數,但由於每個對象都包含一個對其他對象的引用,因此引用計數不會歸零,對象也不會被銷毀,此時需要借助 Python 垃圾收集器的另一個東西:循環垃圾收集器,它定期執行,搜索不可訪問對象的循環並刪除它們。

2.3 內存池機制

Python 將不用的內存放到內存池而不是返回給操作系統。

Pymalloc 機制:用於管理對小塊內存的申請和釋放。

Python 中所有小於 256 字節的對象都使用 pymalloc 實現的分配器,而大的對象使用系統的 malloc。

對於 Python 對象,如整數,浮點數,和 list 等,都有其獨立的私有內存池,對象間不共享它們的內存池。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com