简述python垃圾回收机制_python中的垃圾回收机制简述
2020年12月5日21:47:35 王凱玉
python中的垃圾回收機(jī)制
引用計數(shù)
# 引用計數(shù)
引用計數(shù)是編程語言中的一中內(nèi)存管理技術(shù),可以將資源的被引用次數(shù)保存起來。
當(dāng)引用計數(shù)為0時,資源將被釋放
# 如何讓引用計數(shù)減少
del語句會刪除對象的一個引用,這將導(dǎo)致該引用指向的對象的引用計數(shù)-1
# 引用計數(shù)會導(dǎo)致什么問題
由于兩個或多個對象相互引用時,彼此引用計數(shù)不為0,造成循環(huán)引用無法回收,但是可以用標(biāo)記清除機(jī)制來解決。
# 如何查看引用計數(shù)
import sys
sys.getrefcount(obj)
標(biāo)記清除
# 標(biāo)記清除
標(biāo)記清除分為兩個階段:先標(biāo)記對象(垃圾檢測)、再清除垃圾(垃圾回收)
# 標(biāo)記
在這個階段,垃圾回收器會先從根對象開始遍歷,每一個可以從根對象訪問到的對象都會被添加標(biāo)記,這個對象就會被標(biāo)識為可到達(dá)對象(不會被清除)
# 清除
這時候,垃圾回收器就會對堆內(nèi)存從頭到尾進(jìn)行線性遍歷,如果發(fā)現(xiàn)有對象沒有被標(biāo)識成可多達(dá)對象,就會把該對象回收,之后再講原來標(biāo)記為可到達(dá)對象的標(biāo)識抹掉,以便進(jìn)行下一次的垃圾回收操作。
# 標(biāo)記清除有什么問題
標(biāo)記清除算法最大的缺點(diǎn)就是垃圾收集后有可能造成大量的內(nèi)存碎片,其次就是,由當(dāng)遍歷的內(nèi)存節(jié)點(diǎn)較多時,每次回收都會花費(fèi)很多的時間在遍歷上。
# 常見的名詞
collector:垃圾收集器
mutator:垃圾收集器之外的部分,比如當(dāng)前的應(yīng)用程序
mutator roots:是mutator的根對象,通常是分配在對內(nèi)存之外,可以直接被訪問到的對象,一般就是指靜態(tài)的全局變量。
可到達(dá)對象:從根對象開始遍歷,可以訪問到的對象,也就是mutator正在使用的對象。
分代回收
# 分代回收
分代回收是一種典型的以空間換時間的技術(shù)。
簡單說就是把回收對象分成多個代,比如青年代、中年代、老年代。每一個代都是一個集合。
當(dāng)青年代滿了的時候,就會對所有代執(zhí)行標(biāo)記清除動作,中年代滿了,就會清理中年代和老年代,老年代滿了只會清理自己(老年代的存活時間是最長的)
總結(jié)
以上是生活随笔為你收集整理的简述python垃圾回收机制_python中的垃圾回收机制简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: g120变频器报7490怎么处理_西门子
- 下一篇: flask html下拉列表,如何使用F