最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的垃圾回收機制詳解

 更新時間:2019年08月28日 14:20:59   作者:Jeemzz  
這篇文章主要介紹了Python的垃圾回收機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

引用計數(shù)

在Python源碼中,每一個對象都是一個結(jié)構(gòu)體表示,都有一個計數(shù)字段。

typedef struct_object {
  int ob_refcnt;
  struct_typeobject *ob_type;
} PyObject;

PyObject是每個對象必有的內(nèi)容,其中ob_refcnt就是作為引用計數(shù)。當(dāng)一個對象有了新的引用時,它的ob_refcnt就會增加,引用它的對象被刪除時則減少。一旦對象的引用計數(shù)為0,該對象立即被回收,占用空間就會被釋放。

優(yōu)點

  • 簡單易用
  • 實時性好,一旦沒有引用就會被立即釋放

缺點

  • 需要額外空間去維護引用計數(shù)
  • 不能解決對象的循環(huán)引用

對象的循環(huán)引用
循環(huán)引用是指兩個對象相互引用且沒有外部變量引用其中任何一個,導(dǎo)致引用鏈形成一個環(huán)。

>>> a = {}    # 對象a的引用計數(shù)為1
>>> b = {}    # 對象b的引用計數(shù)為1
>>> a['b'] = b  # b的引用計數(shù)增加1
>>> b['a'] = a  # a的引用計數(shù)增加1
>>> del a     # a的引用計數(shù)減少1,最后a的引用為1
>>> del b     # b的引用計數(shù)減少1,最后b的引用為1

在執(zhí)行完del操作之后,沒有任何引用指向a、b對象,但是由于這兩個對象各自包含一個對對方的引用,所以引用計數(shù)始終保持在1。

按照引用計數(shù)中內(nèi)存回收的原理,由于a和b的計數(shù)不為0,所以在使用引用計數(shù)法進行內(nèi)存管理的時候這兩個對象不會被回收,它們會一直駐留在內(nèi)存中,造成內(nèi)存泄露。

標記清除

標記清除機制主要用于解決循環(huán)引用問題。

標記清除算法是一種基于追蹤回收(tracing GC)技術(shù)實現(xiàn)的垃圾回收算法。主要分為兩個階段:

  • 標記階段,GC會將所有的活動對象打上標記
  • 對那些沒有打上標記的非活動對象進行回收

區(qū)分活動對象與非活動對象

對象之間通過引用即指針連接在一起,構(gòu)成一個有向圖,對象就是這個有向圖的節(jié)點,而引用關(guān)系構(gòu)成這個有向圖的邊。從根對象(root object)出發(fā),沿著有向邊遍歷對象,可達的對象會被標記為活動對象,不可達的對象就是要被清除的非活動對象。

根對象一般是全局變量、調(diào)用棧、寄存器等。

適用范圍

標記清除算法作為Python輔助的垃圾收集技術(shù),主要處理的是容器對象,因為對于字符串、數(shù)值對象等,不可能造成循環(huán)引用的問題,Python會使用一個雙向鏈表將這些容器對象組織起來。

對于標記清除算法來說,有一個比較明顯的缺點:為了清除非活動對象,需要掃描整個堆內(nèi)存,哪怕只剩下小部分活動對象也需要掃描所有對象。

分代回收

分代回收是一種以空間換時間的操作方式,建立在標記清除技術(shù)的基礎(chǔ)之上,也是Python輔助的垃圾收集技術(shù),主要用于處理容器對象。

Python會將內(nèi)存根據(jù)對象的存活時間劃分為不同的集合,每個集合稱為一個代,主要會被分為3代:年輕代。中年代和老年代,它們會對應(yīng)3個鏈表,對應(yīng)的垃圾收集頻率隨著對象存活時間的增大而減小。

新創(chuàng)建的對象都會被分配在年輕代,當(dāng)年輕代鏈表總數(shù)達到上限時,會觸發(fā)Python的垃圾回收機制,對可回收對象進行回收,而那些不可回收的對象會被移到中年代去。依此類推,老年代對象是存活時間最久的對象,甚至有可能存活在整個系統(tǒng)的生命周期內(nèi)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文詳解Python中數(shù)據(jù)清洗與處理的常用方法

    一文詳解Python中數(shù)據(jù)清洗與處理的常用方法

    在數(shù)據(jù)處理與分析過程中,缺失值、重復(fù)值、異常值等問題是常見的挑戰(zhàn),本文總結(jié)了多種數(shù)據(jù)清洗與處理方法,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考下
    2025-01-01
  • Python?os和os.path模塊詳情

    Python?os和os.path模塊詳情

    這篇文章主要介紹了Python?os和os.path模塊詳情,文章圍繞主題展開詳細的相關(guān)內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-04-04
  • python文件操作整理匯總

    python文件操作整理匯總

    本文主要記錄了個人在項目中遇到的一些Python中對于文件、文件夾的操作需要涉及到的函數(shù)等內(nèi)容,非常的詳盡,有需要的可以參考下
    2014-10-10
  • 深度學(xué)習(xí)Tensorflow?2.4?完成遷移學(xué)習(xí)和模型微調(diào)

    深度學(xué)習(xí)Tensorflow?2.4?完成遷移學(xué)習(xí)和模型微調(diào)

    這篇文章主要為大家介紹了深度學(xué)習(xí)Tensorflow?2.4?完成遷移學(xué)習(xí)和模型微調(diào),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    這篇文章主要介紹了Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情,對文件夾和文件進行屬性判斷,首先對文件夾進行遍歷,看文件夾里有什么樣的文件,讀取出文件夾中的所有文件,下面文章將詳細介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • Python-re中search()函數(shù)的用法詳解(查找ip)

    Python-re中search()函數(shù)的用法詳解(查找ip)

    這篇文章主要介紹了Python-re中search()函數(shù)的用法-----查找ip,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Win 10下Anaconda虛擬環(huán)境的教程

    Win 10下Anaconda虛擬環(huán)境的教程

    這篇文章主要介紹了Win 10下Anaconda虛擬環(huán)境的相關(guān)知識,本文通過實例截圖相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Python可視化神器pyecharts繪制雷達圖

    Python可視化神器pyecharts繪制雷達圖

    這篇文章主要介紹了Python可視化神器pyecharts繪制雷達圖,雷達圖是以從同一點開始的軸上表示的三個或更多個定量變量的二維圖表的形式顯示多變量數(shù)據(jù)的圖形方法
    2022-07-07
  • Python Pyecharts繪制箱線圖詳解

    Python Pyecharts繪制箱線圖詳解

    箱形圖(Box-plot)又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計圖。因形狀如箱子而得名。本文將通過Python Pyecharts來繪制一些箱線圖,需要的可以參考一下
    2022-03-03
  • 對pandas的dataframe繪圖并保存的實現(xiàn)方法

    對pandas的dataframe繪圖并保存的實現(xiàn)方法

    下面小編就為大家?guī)硪黄獙andas的dataframe繪圖并保存的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

宜城市| 望江县| 平塘县| 庆安县| 拜城县| 山阳县| 泉州市| 景谷| 银川市| 务川| 犍为县| 深州市| 临清市| 临猗县| 宽甸| 丹巴县| 临西县| 朝阳市| 革吉县| 岐山县| 阳原县| 山西省| 岱山县| 渑池县| 长武县| 原阳县| 武威市| 油尖旺区| 苏州市| 辽宁省| 沧州市| 武定县| 枣阳市| 突泉县| 观塘区| 寿光市| 锦州市| 茶陵县| 昭通市| 津南区| 宁津县|