技術分享: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物件,如整數、浮點數或列表,都擁有獨立的記憶體池,物件之間不會共享這些獨立的記憶體池。也就是說,若分配又釋放了大量的整數,用於快取這些整數的記憶體池將不再分配給浮點數。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2765635/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術分享:記憶體管理記憶體
- python如何進行記憶體管理Python記憶體
- Python如何進行記憶體管理?Python記憶體
- Python分享之Python的記憶體管理Python記憶體
- Paddle原始碼之記憶體管理技術原始碼記憶體
- iOS開發ARC記憶體管理技術要點iOS記憶體
- 記憶體技術詞彙表記憶體
- python的記憶體管理Python記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 記憶體管理 記憶體管理概述記憶體
- iPhone之IOS5記憶體管理(ARC技術概述)iPhoneiOS記憶體
- 伺服器記憶體技術伺服器記憶體
- Python深入 Python的記憶體管理Python記憶體
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 教你如何進行 linux swap 交換記憶體擴容Linux記憶體
- 如何進行 Python效能分析,你才能如魚得水?Python
- Everspin MRAM記憶體技術如何工作記憶體
- CTF記憶體高階利用技術記憶體
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- 【記憶體管理】記憶體佈局記憶體
- Python深入06 Python的記憶體管理Python記憶體
- 記憶體管理記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Aerospike的bin記憶體管理--即列記憶體管理ROS記憶體
- linux kernel記憶體碎片防治技術Linux記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 強如 Disruptor 也發生記憶體溢位?記憶體溢位
- Linux 記憶體管理:記憶體對映Linux記憶體
- 技術管理進階——管理者如何進行梯隊設計及建設
- 記憶體管理-swMemoryGlobal記憶體
- OC記憶體管理記憶體
- iOS 記憶體管理iOS記憶體
- JavaScript 記憶體管理JavaScript記憶體
- MySQL記憶體管理MySql記憶體