談?wù)刾ython垃圾回收機制
什么是垃圾回收機制?
首先,咱先來解釋名詞,垃圾回收是不是就是將沒用的,廢棄的東西回收起來。
在坐的各位都沒有女朋友對吧,那難以想象你們的房間會是一個什么樣子,可能會有很多垃圾,很凌亂,自己也不收拾。那當你有了女朋友了就不一樣了,她會幫你收拾房間,把沒用的垃圾都給你扔掉。
那在我們Python當中的垃圾回收承擔的就是女朋友的角色,你們想象一下,你現(xiàn)在有一個輕度強迫癥的女朋友一刻不停的跟在你的背后打掃衛(wèi)生,你一放下臟碟子或者垃圾什么的,就已經(jīng)幫你清理、打掃了
所以垃圾回收機制就是自動幫助我們管理內(nèi)存,清理垃圾的一種工具
垃圾回收機制有什么用?
那我們現(xiàn)在先來想一想,我們平時在寫程序的時候是不是會定義一些變量名,那這些變量名都是存在哪些地方呢?是不是都是存在內(nèi)存里面,那當我們一直不停的定義變量是不是就會使我們內(nèi)存空間的占有率增加,那我們的垃圾回收機制就會將一些沒用的名字,沒用的垃圾自動的回收起來。
識別垃圾對象,從垃圾對象那里回收內(nèi)存
怎么進行垃圾回收
在我們Python當中采用的是引用計數(shù)機制為主,分代收集機制為輔的策略。
1、引用計數(shù)
在Python中,大多數(shù)對象的生命周期都是通過對象的引用計數(shù)來管理的。從廣義上來講,引用計數(shù)也是一種垃圾收集機制,而且也是一種最直觀,最簡單的垃圾收集技術(shù)。
引用計數(shù)的原理:
當一個對象的引用被創(chuàng)建或者復制時,對象的引用計數(shù)加1;
當一個對象的引用被銷毀時,對象的引用計數(shù)減1;
當對象的引用計數(shù)減少為0時,就意味著對象已經(jīng)沒有被任何人使用了,可以將其所占用的內(nèi)存釋放了。
引用計數(shù)有一個致命的弱點就是是循環(huán)引用(也稱交叉應(yīng)用)。
循環(huán)引用可以使一組對象的引用計數(shù)不為0,然而這些對象實際上并沒有被任何外部對象所引用,它們之間只是相互引用。
這意味著不會再有人使用這組對象,應(yīng)該回收這組對象所占用的內(nèi)存空間,然后由于相互引用的存在,
每一個對象的引用計數(shù)都不為0,因此這些對象所占用的內(nèi)存永遠不會被釋放。
優(yōu)點:
簡單、直觀
實時性,只要沒有了引用就釋放資源。
缺點:
維護引用計數(shù)需要消耗一定的資源
循環(huán)應(yīng)用時,無法回收。也正是因為這個原因,才需要通過標記-清理和分代收集機制來輔助引用計數(shù)機制。
2、標記-清除
“標記-清除”是為了解決循環(huán)引用的問題??梢园渌麑ο笠玫娜萜鲗ο螅ū热纾簂ist,set,dict,class,instance)都可能產(chǎn)生循環(huán)引用。
標記-清除原理:
“標記-清除”不改動真實的引用計數(shù),而是將
集合中對象的引用計數(shù)復制一份副本,改動該對象引用的副本。對于副
本做任何的改動,都不會影響到對象生命走起的維護。
3、分代回收
分代回收原理:
將系統(tǒng)中的所有內(nèi)存塊根據(jù)其存活時間劃分為不同的集合,
每一個集合就成為一個“代”,垃圾收集的頻率隨著“代”的存活時間的增大而減小。
也就是說,活得越長的對象,就越不可能是垃圾,就應(yīng)該減少對它的垃圾收集頻率。
那么如何來衡量這個存活時間:通常是利用幾次垃圾收集動作來衡量,
如果一個對象經(jīng)過的垃圾收集次數(shù)越多,可以得出:該對象存活時間就越長。
以上就是談?wù)刾ython垃圾回收機制的詳細內(nèi)容,更多關(guān)于python垃圾回收機制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實現(xiàn)將Excel內(nèi)容批量導出為PDF文件
這篇文章主要為大家介紹了如何利用Python實現(xiàn)將Excel表格內(nèi)容批量導出為PDF文件,文中的實現(xiàn)步驟講解詳細,感興趣的小伙伴可以了解一下2022-04-04聊聊Python pandas 中l(wèi)oc函數(shù)的使用,及跟iloc的區(qū)別說明
這篇文章主要介紹了聊聊Python pandas 中l(wèi)oc函數(shù)的使用,及跟iloc的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03pytorch載入預(yù)訓練模型后,實現(xiàn)訓練指定層
今天小編就為大家分享一篇pytorch載入預(yù)訓練模型后,實現(xiàn)訓練指定層,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python利用sqlacodegen自動生成ORM實體類示例
這篇文章主要介紹了Python利用sqlacodegen自動生成ORM實體類,結(jié)合實例形式分析了Python sqlacodegen安裝技巧ORM實體類相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-06-06