python的内存管理机制及调优手段_Python的内存管理机制及调优手段
內(nèi)存管理機(jī)制:引用計(jì)數(shù)、垃圾回收、內(nèi)存池
引用計(jì)數(shù):
引用計(jì)數(shù)是一種非常高效的內(nèi)存管理手段,當(dāng)一個(gè)Python對(duì)象引用時(shí)其引用計(jì)數(shù)加一,當(dāng)其不再被一個(gè)變量引用時(shí)則減一。當(dāng)引用計(jì)數(shù)等于0時(shí)對(duì)象被刪除。
1.引用計(jì)數(shù):
引用計(jì)數(shù)也是一種垃圾收集機(jī)制,而且也是一種最直觀,最簡(jiǎn)單的垃圾收集技術(shù)。當(dāng) Python 的某個(gè)對(duì)象的引用計(jì)數(shù)降為 0 時(shí),說(shuō)明沒(méi)有任何引用指向該對(duì)象,該對(duì)象就成為要被回收的垃圾了。比如某個(gè)新建對(duì)象,它被分配給某個(gè)引用,對(duì)象的引用計(jì)數(shù)變?yōu)?1。如果引用被刪除,對(duì)象的引用計(jì)數(shù)為 0,那么該對(duì)象就可以被垃圾回收。不過(guò)如果出現(xiàn)循環(huán)引用的話,引用計(jì)數(shù)機(jī)制就不再起有效的作用了。
2.標(biāo)記清除:
如果兩個(gè)對(duì)象的引用計(jì)數(shù)都為1,但是僅僅存在他們之間的循環(huán)引用,那么這兩個(gè)對(duì)象都是需要被回收的。也就是說(shuō),他們的引用計(jì)數(shù)雖然表現(xiàn)為非0,但是實(shí)際上有效的引用計(jì)數(shù)為0.所以現(xiàn)將循環(huán)引用摘掉,就會(huì)得出這兩個(gè)對(duì)象的有效計(jì)數(shù)。
3、分代收集
經(jīng)過(guò)上面的【標(biāo)記-清理】方法,已經(jīng)可以保證對(duì)垃圾的回收了,但還有一個(gè)問(wèn)題,【標(biāo)記-清理】什么時(shí)候執(zhí)行比較好呢,是對(duì)所有對(duì)象都同時(shí)執(zhí)行嗎?
同時(shí)執(zhí)行很顯然不合理,我們知道,存活越久的對(duì)象,說(shuō)明他的引用更持久(好像是個(gè)屁話,引用不持久就被刪除了),為了更合理的進(jìn)行【標(biāo)記-刪除】,就需要對(duì)對(duì)象進(jìn)行分代處理,思路很簡(jiǎn)單:
1、新創(chuàng)建的對(duì)象做為0代
2、每執(zhí)行一個(gè)【標(biāo)記-刪除】,存活的對(duì)象代數(shù)就+1
3、代數(shù)越高的對(duì)象(存活越持久的對(duì)象),進(jìn)行【標(biāo)記-刪除】的時(shí)間間隔就越長(zhǎng)。這個(gè)間隔,江湖人稱(chēng)閥值
4.調(diào)優(yōu)手段(了解)
1.手動(dòng)垃圾回收
2.調(diào)高垃圾回收閾值
3.避免循環(huán)引用(手動(dòng)解循環(huán)引用和使用弱引用)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python的内存管理机制及调优手段_Python的内存管理机制及调优手段的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 张恒个人资料简介 张恒简单介绍
- 下一篇: python判断相同,Python判断两