Python如何進行記憶體管理?
Python中主要透過引用計數和記憶體池機制進行記憶體管理。
一、引用計數機制
Python內部使用引用計數(記錄物件有多少個引用)來保持追蹤記憶體中的物件,當物件被建立時,該物件的引用計數加1;當物件被銷燬時,該物件的引用計數變為0,它會被當做垃圾進行回收。
引用計數增加的情況:
(1)物件被建立,如x=4。
(2)賦值給其它變數,如y=x。
(3)被作為引數傳遞給函式,如foo(x)。
(4)作為容器物件的一個元素,如a=[1,x,'33']。
引用計數減少的情況
(1)物件的引用離開它的作用域,比如, foo(x)函式執行結束時,x引用的物件引用計數減1。
(2)物件的引用被顯式地銷燬,如del x或del y。
(3)物件的別名被賦值給其他物件,x=789。
(4)物件從視窗物件中被移除,a.remove(x)。
垃圾回收:
(1)垃圾收集器會回收引用計數為0的物件,並清除這些物件佔用的記憶體空間。
(2)當兩個物件相互引用時,若它們沒有被其它引用所持有,則會被垃圾收集器回收。
(3)垃圾回收機制還有一個迴圈垃圾回收器,它可以確保釋放迴圈引用物件(a引用b, b引用a)。
二、記憶體池機制
在Python中,很多時候申請的記憶體都是小塊記憶體,這些小塊記憶體在申請不久後又會被釋放,這就意味著程式在執行期間會大量地執行申請和釋放操作,影響Python的執行效率。為了加快Python的執行效率,Python引入了一個記憶體池機制,用於管理對小塊記憶體的申請和釋放。
Python中所有小於256個位元組的物件都使用記憶體池的分配器。另外,一些Python物件,如整數、浮點數或列表,都擁有獨立的記憶體池,物件之間不會共享這些獨立的記憶體池。也就是說,若分配又釋放了大量的整數,用於快取這些整數的記憶體池將不再分配給浮點數。
Python如何進行記憶體管理?上面已經為大家做了詳細的介紹, 希望能幫到大家。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2771107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python如何進行記憶體管理Python記憶體
- 技術分享:Python如何進行記憶體管理?Python記憶體
- python的記憶體管理Python記憶體
- 記憶體管理 記憶體管理概述記憶體
- Python深入 Python的記憶體管理Python記憶體
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 教你如何進行 linux swap 交換記憶體擴容Linux記憶體
- 如何進行 Python效能分析,你才能如魚得水?Python
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- 【記憶體管理】記憶體佈局記憶體
- Python深入06 Python的記憶體管理Python記憶體
- Python分享之Python的記憶體管理Python記憶體
- 記憶體管理記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Aerospike的bin記憶體管理--即列記憶體管理ROS記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 強如 Disruptor 也發生記憶體溢位?記憶體溢位
- Linux 記憶體管理:記憶體對映Linux記憶體
- 記憶體管理-swMemoryGlobal記憶體
- OC記憶體管理記憶體
- iOS 記憶體管理iOS記憶體
- JavaScript 記憶體管理JavaScript記憶體
- MySQL記憶體管理MySql記憶體
- Oracle 記憶體管理Oracle記憶體
- JavaScript記憶體管理JavaScript記憶體
- 2 Day DBA-管理Oracle例項-管理記憶體-修改記憶體設定-自動記憶體管理Oracle記憶體
- Python記憶體管理機制-《原始碼解析》Python記憶體原始碼
- Python記憶體管理:基本概念與技巧Python記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- 如何進行軟體反芻管理?(轉)
- 2 Day DBA-管理Oracle例項-管理記憶體-關於記憶體管理Oracle記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- Python 快速教程(深入篇06): Python的記憶體管理Python記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體