垃圾回收:引用计数与分代收集机制
當(dāng)引?計(jì)數(shù)為0時(shí),該對(duì)象?命就結(jié)束了。
引?計(jì)數(shù)機(jī)制的優(yōu)點(diǎn):
1、簡(jiǎn)單
2、實(shí)時(shí)性:?旦沒有引?,內(nèi)存就直接釋放了。不?像其他機(jī)制等到特定時(shí)機(jī)。實(shí)時(shí)性還帶來?個(gè)好處:處理回收內(nèi)存的時(shí)間分?jǐn)偟搅似綍r(shí)。
引?計(jì)數(shù)機(jī)制的缺點(diǎn):
1、維護(hù)引?計(jì)數(shù)
2、消耗資源循環(huán)引?
list1??? =???[]
list2??? =???[]
list1.append(list2)
list2.append(list1)
list1與list2相互引?,如果不存在其他對(duì)象對(duì)他們的引用,list1與list2的引用計(jì)數(shù)也仍然1,所占?的內(nèi)存永遠(yuǎn)無(wú)法被回收,這將是致命的。??? 對(duì)于如今的強(qiáng)?硬件,缺點(diǎn)1尚可接受,但是循環(huán)引?導(dǎo)致內(nèi)存泄露,注定python還將引?新的回收機(jī)制。(分代收集)
?.垃圾回收機(jī)制
Python中的垃圾回收是以引用計(jì)數(shù)為主,分代收集為輔。
1、導(dǎo)致引用計(jì)數(shù)+1的情況
對(duì)象被創(chuàng)建,例如a=23??????
?對(duì)象被引?,例如b=a???
對(duì)象被作為參數(shù),傳?到?個(gè)函數(shù)中,例如func(a)???????
對(duì)象作為?個(gè)元素,存儲(chǔ)在容器中,例如list1=[a,a]???
2、導(dǎo)致引用計(jì)數(shù)-1的情況
對(duì)象的別名被顯式銷毀,例如del??? a??????
?對(duì)象的別名被賦予新的對(duì)象,例如a=24???
?個(gè)對(duì)象離開它的作?域,例如f函數(shù)執(zhí)?完畢時(shí),func函數(shù)中的局部變量(全局變量不會(huì))???
對(duì)象所在的容器被銷毀,或從容器中刪除對(duì)象???
3、查看一個(gè)對(duì)象的引用計(jì)數(shù)
import??? sys
a??? =??? "hello??? world"
?sys.getrefcount(a)
可以查看a對(duì)象的引用計(jì)數(shù),但是?正常計(jì)數(shù)?1,因?yàn)檎{(diào)?函數(shù)的時(shí)候傳入a,這會(huì)讓a的引用計(jì)數(shù)+1
?
4.有三種情況會(huì)觸發(fā)垃圾回收:
總結(jié)
以上是生活随笔為你收集整理的垃圾回收:引用计数与分代收集机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序中实现瀑布流布局和无限加载
- 下一篇: 微信小程序最常用的布局——Flex布局