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

Python 內(nèi)存管理機(jī)制全面分析

 更新時間:2021年01月16日 15:45:50   作者:風(fēng)不再來  
這篇文章主要介紹了Python 內(nèi)存管理機(jī)制全面分析,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

內(nèi)存管理:

概述

在Python中,內(nèi)存管理涉及到一個包含所有Python對象和數(shù)據(jù)結(jié)構(gòu)的私有堆(heap). 這個私有堆的管理由內(nèi)部的Python內(nèi)存管理器保證。Python內(nèi)存管理器有不同的組件來處理各種動態(tài)存儲管理方面的問題,如共享,分割,預(yù)分配或緩存。

在最底層,一個原始內(nèi)存分配器通過與操作系統(tǒng)的內(nèi)存管理器交互,確保私有堆有足夠的空間來存儲所有與Python相關(guān)的數(shù)據(jù)。在原始內(nèi)存分配器的基礎(chǔ)上,幾個對象特定的分配器在同一個堆上運行,并根據(jù)每種對象類型的特點實現(xiàn)不同的內(nèi)存管理策略。例如,整數(shù)對象在堆內(nèi)的管理方式不同于字符串,元祖,或者字典。因為整數(shù)需要不同的存儲需求和速度與空間的權(quán)衡。因此,Python內(nèi)存管理器將一些工作分配給對象特定分配器,但確保后者在私有堆的范圍內(nèi)運行。

Python堆內(nèi)存的管理由解釋器來執(zhí)行,用戶對他沒有控制權(quán),即使他們經(jīng)常操作只想堆內(nèi)存塊的對象指針,理解這一點非常重要。Python對象和其他內(nèi)部緩沖區(qū)的堆空間分配是由Python內(nèi)存管理器按需通過本文檔中列出的Python/C API函數(shù)進(jìn)行的。

內(nèi)存管理機(jī)制

Python的內(nèi)存管理總共分為4層(Layer0-3)

第一層Layer1的僅僅是對malloc的簡單包裝, raw memory,目的是為了兼容各個操作系統(tǒng),因為不同的操作系統(tǒng)調(diào)用malloc的時候可能會有不同的行為結(jié)果;第二層Layer2是內(nèi)存管理機(jī)制的核心,其中g(shù)c就是在這一層發(fā)揮至關(guān)重要的作用。第三層,是對象緩沖池,如Python對一些對象的直接操作,包括int,list等

對于可能被經(jīng)常使用,而且是immutable的對象,如bool類型,元祖類型,小的整數(shù),長度較短的字符串等,Python會緩存在layer3,直接供Python調(diào)用,避免頻繁的創(chuàng)建和銷毀。'

當(dāng)一個對象邏輯上不被使用了,但并沒有被釋放,那么就存在內(nèi)存泄漏,很可能會造成程序效率低下甚至崩潰

Python分配內(nèi)存的時候又分為大內(nèi)存和小內(nèi)存,大內(nèi)存以256字節(jié)為界限,對于大內(nèi)存使用Malloc進(jìn)行分配,而對于小內(nèi)存則使用內(nèi)存池進(jìn)行分配,由于小內(nèi)存的分配和釋放是頻繁的,因此內(nèi)存池的使用大大提高了Python的執(zhí)行效率。

引用計數(shù)

在Python中大多數(shù)對象的生命周期都是通過引用計數(shù)來管理的,引用技術(shù)也是一種最直觀最簡單的垃圾收集技術(shù)

每個Python對象都有一個引用計數(shù)器,用于記錄多少變量指向這個對象,可以通過sys模塊的getrefcount查詢獲得

每一個對象都會維護(hù)一個引用計數(shù)器,當(dāng)一個對象被引用的時候,它的計數(shù)器就+1,當(dāng)一個對象的引用被銷毀的時候,計數(shù)器-1,當(dāng)這個對象的引用計數(shù)為0的時候,說明這個對象已經(jīng)沒有使用了,可以被釋放,就會被回收,具有實時性。由于引用計數(shù)需要維護(hù)計數(shù)器等額外的操作,為了與引用計數(shù)搭配,在內(nèi)存的分配和釋放上獲得最高的效率,Python因此設(shè)計了大量的內(nèi)存池機(jī)制。

下面這些情況引用計數(shù)+1

(1). 對象被創(chuàng)建: a = 4

(2). 引用被復(fù)制: y = x

(3). 被作為參數(shù)傳遞給函數(shù): f(x)

(4). 作為容器對象的一個元素: a = [1, x]

下面這些情況引用計數(shù)-1

(1). 離開作用域,比如f(x)函數(shù)結(jié)束的時候,x只想的對象引用減1

(2). 引用被顯式地銷毀: del x

(3). 對象的一個別名被賦值給其他對象: y = 1

(4). 對象從一個容器對象中移除: l.remove(x)

(5). 容器對象本身被銷毀: del l 

Python的內(nèi)存管理主要以引用計數(shù)為主,引用計數(shù)機(jī)制能釋放大部分無用對象,除了第一種情況,循環(huán)引用,因為循環(huán)引用的對象那個引用計數(shù)器永不為0。

循環(huán)引用,就是一個對象直接或者間接引用自己本身,導(dǎo)致計數(shù)器不為0

以上就是Python 內(nèi)存管理機(jī)制全面分析的詳細(xì)內(nèi)容,更多關(guān)于python 內(nèi)存管理機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 合并百度影音的離線數(shù)據(jù)( with python 2.3)

    合并百度影音的離線數(shù)據(jù)( with python 2.3)

    這篇文章主要介紹了合并百度影音的離線數(shù)據(jù)( with python 2.3)的相關(guān)資料
    2015-08-08
  • Python property函數(shù)的具體使用

    Python property函數(shù)的具體使用

    property()函數(shù)是Python中用于創(chuàng)建可管理屬性的重要工具,它可以實現(xiàn)數(shù)據(jù)封裝、訪問控制、屬性計算等功能,本文就來介紹一下如何使用,感興趣的可以了解一下
    2024-02-02
  • python獲取指定時間差的時間實例詳解

    python獲取指定時間差的時間實例詳解

    這篇文章主要介紹了python獲取指定時間差的時間實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Python抓取淘寶下拉框關(guān)鍵詞的方法

    Python抓取淘寶下拉框關(guān)鍵詞的方法

    這篇文章主要介紹了Python抓取淘寶下拉框關(guān)鍵詞的方法,涉及Python文件讀寫、正則匹配及字符串操作等相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python Flask入門之模板

    Python Flask入門之模板

    今天小編就為大家分享一篇Python Flask模板的入門教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-11-11
  • Python3.6簡單反射操作示例

    Python3.6簡單反射操作示例

    這篇文章主要介紹了Python3.6簡單反射操作,結(jié)合實例形式分析了Python3反射的概念、原理、相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python接口測試環(huán)境搭建過程詳解

    Python接口測試環(huán)境搭建過程詳解

    這篇文章主要介紹了Python接口測試環(huán)境搭建過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python爬蟲之urllib基礎(chǔ)用法教程

    Python爬蟲之urllib基礎(chǔ)用法教程

    這篇文章主要為大家詳細(xì)介紹了Python爬蟲1.1 urllib基礎(chǔ)用法教程,用于對Python爬蟲技術(shù)進(jìn)行系列文檔講解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python定時庫Apscheduler的簡單使用

    Python定時庫Apscheduler的簡單使用

    Apscheduler是基于Quartz的Python定時任務(wù)框架,功能上跟Quartz一致,使用上跟Quartz也幾乎一致。下面通過本文給大家介紹Python定時庫Apscheduler的簡單使用,感興趣的朋友一起看看吧
    2021-11-11
  • pandas數(shù)據(jù)預(yù)處理之dataframe的groupby操作方法

    pandas數(shù)據(jù)預(yù)處理之dataframe的groupby操作方法

    下面小編就為大家分享一篇pandas數(shù)據(jù)預(yù)處理之dataframe的groupby操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評論

临澧县| 巨野县| 镇安县| 宜都市| 松溪县| 阜宁县| 游戏| 浮山县| 仪征市| 永清县| 和林格尔县| 庆城县| 保亭| 连南| 承德县| 峨眉山市| 余江县| 紫云| 鄂托克前旗| 称多县| 赤城县| 天镇县| 远安县| 肥乡县| 双牌县| 基隆市| 凌云县| 大兴区| 常宁市| 武功县| 仪征市| 许昌市| 香格里拉县| 治多县| 秦皇岛市| 蓬安县| 罗城| 晋宁县| 哈尔滨市| 西林县| 黔西县|