Python垃圾回收機(jī)制

Python GC主要使用引用計數(shù)(reference counting)來跟蹤和回收垃圾蚊俺。在引用計數(shù)的基礎(chǔ)上损晤,通過“標(biāo)記-清除”(mark and sweep)解決容器對象可能產(chǎn)生的循環(huán)引用問題,通過“分代回收”(generation collection)以空間換時間的方法提高垃圾回收效率。

1、引用計數(shù)

PyObject是每個對象必有的內(nèi)容,其中ob_refcnt就是做為引用計數(shù)禾锤。當(dāng)一個對象有新的引用時,它的ob_refcnt就會增加摹察,當(dāng)引用它的對象被刪除恩掷,它的ob_refcnt就會減少.引用計數(shù)為0時,該對象生命就結(jié)束了供嚎。

優(yōu)點(diǎn)

  • 簡單
  • 實(shí)時性

缺點(diǎn):

  • 維護(hù)引用計數(shù)消耗資源
  • 循環(huán)引用
2黄娘、標(biāo)記-清除機(jī)制

基本思路是先按需分配,等到?jīng)]有空閑內(nèi)存的時候從寄存器和程序棧上的引用出發(fā)克滴,遍歷以對象為節(jié)點(diǎn)逼争、以引用為邊構(gòu)成的圖,把所有可以訪問到的對象打上標(biāo)記劝赔,然后清掃一遍內(nèi)存空間誓焦,把所有沒標(biāo)記的對象釋放。

3着帽、分代技術(shù)

分代回收的整體思想是:將系統(tǒng)中的所有內(nèi)存塊根據(jù)其存活時間劃分為不同的集合杂伟,每個集合就成為一個“代”,垃圾收集頻率隨著“代”的存活時間的增大而減小仍翰,存活時間通常利用經(jīng)過幾次垃圾回收來度量赫粥。

Python默認(rèn)定義了三代對象集合,索引數(shù)越大予借,對象存活時間越長越平。

舉例:

當(dāng)某些內(nèi)存塊M經(jīng)過了3次垃圾收集的清洗之后還存活時,我們就將內(nèi)存塊M劃到一個集合A中去灵迫,而新分配的內(nèi)存都劃分到集合B中去秦叛。當(dāng)垃圾收集開始工作時,大多數(shù)情況都只對集合B進(jìn)行垃圾回收瀑粥,而對集合A進(jìn)行垃圾回收要隔相當(dāng)長一段時間后才進(jìn)行挣跋,這就使得垃圾收集機(jī)制需要處理的內(nèi)存少了,效率自然就提高了利凑。在這個過程中浆劲,集合B中的某些內(nèi)存塊由于存活時間長而會被轉(zhuǎn)移到集合A中,當(dāng)然哀澈,集合A中實(shí)際上也存在一些垃圾牌借,這些垃圾的回收會因?yàn)檫@種分代的機(jī)制而被延遲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末割按,一起剝皮案震驚了整個濱河市膨报,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌适荣,老刑警劉巖现柠,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弛矛,居然都是意外死亡够吩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門丈氓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來周循,“玉大人,你說我怎么就攤上這事万俗⊥宓眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵闰歪,是天一觀的道長嚎研。 經(jīng)常有香客問我,道長库倘,這世上最難降的妖魔是什么临扮? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮于樟,結(jié)果婚禮上公条,老公的妹妹穿的比我還像新娘。我一直安慰自己迂曲,他們只是感情好靶橱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著路捧,像睡著了一般关霸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杰扫,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天队寇,我揣著相機(jī)與錄音,去河邊找鬼章姓。 笑死佳遣,一個胖子當(dāng)著我的面吹牛识埋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播零渐,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼窒舟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诵盼?” 一聲冷哼從身側(cè)響起惠豺,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎风宁,沒想到半個月后洁墙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戒财,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年热监,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饮寞。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡狼纬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骂际,到底是詐尸還是另有隱情疗琉,我是刑警寧澤盈简,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布类缤,位于F島的核電站餐弱,受9級特大地震影響膏蚓,放射性物質(zhì)發(fā)生泄漏氓扛。R本人自食惡果不足惜采郎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一真慢、第九天 我趴在偏房一處隱蔽的房頂上張望管嬉。 院中可真熱鬧蚯撩,春花似錦胎挎、人聲如沸德迹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笨奠。三九已至艰躺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眨八,已是汗流浹背腺兴。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留廉侧,地道東北人页响。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓篓足,卻偏偏與公主長得像,于是被迫代替她去往敵國和親闰蚕。 傳聞我的和親對象是個殘疾皇子栈拖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 雖然是自己轉(zhuǎn)載的但是是真的好的一篇圖文并茂的對垃圾回收機(jī)制的講解!!! 先來個概述,第二部分的畫述才是厲害的没陡。 G...
    東皇Amrzs閱讀 118,670評論 13 176
  • 現(xiàn)在的高級語言如java涩哟,c#等,都采用了垃圾收集機(jī)制盼玄,而不再是c贴彼,c++里用戶自己管理維護(hù)內(nèi)存的方式。但是這種方...
    LittlePy閱讀 744評論 0 1
  • Python GC主要使用引用計數(shù)(referencecounting)來跟蹤和回收垃圾埃儿。在引用計數(shù)的基礎(chǔ)上器仗,通過...
    nine_9閱讀 263評論 1 0
  • Python GC主要使用引用計數(shù)(reference counting)來跟蹤和回收垃圾。在引用計數(shù)的基礎(chǔ)上童番,通...
    菜鳥瞎編閱讀 178評論 0 0
  • 這兩天和朋友討論問題精钮,期間提到了垃圾回收機(jī)制,我立馬想到了 python 的垃圾回收機(jī)制剃斧,之前有看過相關(guān)的資料轨香,但...
    除囧閱讀 510評論 0 2