Python 垃圾回收機制詳解
Python 的GC模塊主要運用了引用計數來跟蹤和回收垃圾;通過“標記-清除”解決容器對象可能產生的循環引用問題;通過分代回收以空間換時間進一步提高垃圾回收的效率。
也即採用“引用計數“爲主(實時性,一旦沒有引用,內存就直接釋放了),“標記-清除”與“分代收集”兩種機制爲輔的策略。
1. 引用計數
爲每一個對象維護一個引用計數器,當一個對象的引用被創建或者複製時,(對象的引用)計數器+1,當一個對象的引用被銷燬時,計數器的值-1,當計數器的值爲0時,就意味着對象已經再沒有被使用了,可以將其內存釋放掉。
2. 標記-清除
“標記-清除”的出現打破了循環引用,也就是它只關注那些可能會產生循環引用的對象,Python中的循環引用總是發生在容器container對象之間,也就是能夠在內部持有其他對象的對象(比如:list、dict、class等)。這也使得該方法帶來的開銷只依賴於容器對象的數量。
原理:
將集合中對象的引用計數複製一份副本,用於找尋root object集合(該set中的對象是不能被回收的)。當成功找到root object集合,首先將現在的內存鏈表一分爲二,一條鏈表維護root object集合,成爲root鏈表;另外一條維護剩下的對象,成爲unreachable鏈表。
一旦在標記的過程中,發現現在在unreachable鏈表且可能存在被root鏈表中直接或間接引用的對象,就將其從unreachable鏈表中移到root鏈表中;當完成標記後,unreachable鏈表中剩下的所有對象就是垃圾對象了,接下來的垃圾回收只需限制在unreachable鏈表中即可。
缺點:
該機制所帶來的額外操作和需要回收的內存塊成正比。
3. 分代回收
活的越長的對象,就越不可能是垃圾,就應該減少對它的垃圾收集頻率。
4. 其他
4.1 JNI(Java Native Interface)
提供了若干的API,實現Java與其他語言的通信。
總結
本篇文章就到這裏了,希望能夠給你帶來幫助,也希望您能夠多多關注好二三四的更多內容!
-
汴州是哪裏,汴州的介紹
1、汴州即河南省開封市,中國八大古都之一,是國務院首批命名的歷史文化名城,開封市的歷史已有2000多年,宋朝原來建都在這個地方,古稱樑、汴或者汴梁,簡稱汴。2、開封是我國著名的民間藝術之鄉,有“中國戲曲之鄉”、“中國木版年畫之鄉”、“中國汴繡之鄉”、“中國菊花...
-
劃地爲牢造句
造句指懂得並使用字詞,按照一定的句法規則造出字詞通順、意思完整、符合邏輯的句子。依據現代語文學科特徵,可延伸爲寫段、作文的基礎,是學生寫好作文的基本功。造句來源清俞樾《春在堂隨筆》卷八:“其用意,其造句,均以纖巧勝。”夏丏尊葉聖陶《文心雕龍》四:“造句也...
-
用鹹魚造句子
造句指懂得並使用字詞,按照一定的句法規則造出字詞通順、意思完整、符合邏輯的句子。依據現代語文學科特徵,可延伸爲寫段、作文的基礎,是學生寫好作文的基本功。造句來源清俞樾《春在堂隨筆》卷八:“其用意,其造句,均以纖巧勝。”夏丏尊葉聖陶《文心雕龍》四:“造句也...
-
匆匆賞析
1、燕子去了,有再來的時候;楊柳枯了,有再青的時候;桃花謝了,有再開的時候。但是,聰明的,你告訴我,我們的日子爲什麼一去不復返呢?——是有人偷了他們罷:那是誰?又藏在何處呢?是他們自己逃走了罷:現在又到了哪裏呢?我不知道他們給了我多少日子;但我的手確乎是漸漸空虛了。在默...