溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中進(jìn)行內(nèi)存管理的方法

發(fā)布時(shí)間:2020-08-24 13:46:37 來源:億速云 閱讀:119 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下python中進(jìn)行內(nèi)存管理的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

Python引入了一個(gè)機(jī)制:引用計(jì)數(shù),來進(jìn)行管理內(nèi)存。

python內(nèi)部使用引用計(jì)數(shù),來保持追蹤內(nèi)存中的對(duì)象,Python內(nèi)部記錄了對(duì)象有多少個(gè)引用,即引用計(jì)數(shù),當(dāng)對(duì)象被創(chuàng)建時(shí)就創(chuàng)建了一個(gè)引用計(jì)數(shù),當(dāng)對(duì)象不再需要時(shí),這個(gè)對(duì)象的引用計(jì)數(shù)為0時(shí),它被垃圾回收。

總結(jié)一下對(duì)象會(huì)在以下情況下引用計(jì)數(shù)加1:

1.對(duì)象被創(chuàng)建:x=4

2.另外的別人被創(chuàng)建:y=x

3.被作為參數(shù)傳遞給函數(shù):foo(x)

4.作為容器對(duì)象的一個(gè)元素:a=[1,x,'33']

引用計(jì)數(shù)減少情況

1.一個(gè)本地引用離開了它的作用域。比如上面的foo(x)函數(shù)結(jié)束時(shí),x指向的對(duì)象引用減1。

2.對(duì)象的別名被顯式的銷毀:del x ;或者del y

3.對(duì)象的一個(gè)別名被賦值給其他對(duì)象:x=789

4.對(duì)象從一個(gè)窗口對(duì)象中移除:myList.remove(x)

5.窗口對(duì)象本身被銷毀:del myList,或者窗口對(duì)象本身離開了作用域。

垃圾回收

1、當(dāng)內(nèi)存中有不再使用的部分時(shí),垃圾收集器就會(huì)把他們清理掉。它會(huì)去檢查那些引用計(jì)數(shù)為0的對(duì)象,然后清除其在內(nèi)存的空間。當(dāng)然除了引用計(jì)數(shù)為0的會(huì)被清除,還有一種情況也會(huì)被垃圾收集器清掉:當(dāng)兩個(gè)對(duì)象相互引用時(shí),他們本身其他的引用已經(jīng)為0了。

2、垃圾回收機(jī)制還有一個(gè)循環(huán)垃圾回收器, 確保釋放循環(huán)引用對(duì)象(a引用b, b引用a, 導(dǎo)致其引用計(jì)數(shù)永遠(yuǎn)不為0)。

在Python中,許多時(shí)候申請(qǐng)的內(nèi)存都是小塊的內(nèi)存,這些小塊內(nèi)存在申請(qǐng)后,很快又會(huì)被釋放,由于這些內(nèi)存的申請(qǐng)并不是為了創(chuàng)建對(duì)象,所以并沒有對(duì)象一級(jí)的內(nèi)存池機(jī)制。這就意味著Python在運(yùn)行期間會(huì)大量地執(zhí)行malloc和free的操作,頻繁地在用戶態(tài)和核心態(tài)之間進(jìn)行切換,這將嚴(yán)重影響Python的執(zhí)行效率。為了加速Python的執(zhí)行效率,Python引入了一個(gè)內(nèi)存池機(jī)制,用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放。

內(nèi)存池機(jī)制

Python提供了對(duì)內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。

Python中所有小于256個(gè)字節(jié)的對(duì)象都使用pymalloc實(shí)現(xiàn)的分配器,而大的對(duì)象則使用系統(tǒng)的 malloc。另外Python對(duì)象,如整數(shù),浮點(diǎn)數(shù)和List,都有其獨(dú)立的私有內(nèi)存池,對(duì)象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。

看完了這篇文章,相信你對(duì)python中進(jìn)行內(nèi)存管理的方法有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI