电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何快速理解python的垃圾回收機制

瀏覽:43日期:2022-07-12 17:05:30

一、先來說說為什么要有垃圾回收

解釋器在執(zhí)行到定義變量得語法時,會申請內(nèi)存空間來存放變量得值,但是由于內(nèi)存空間是有限得,所以這就涉及到了內(nèi)存回收問題了,當(dāng)一個變量值沒有用了(簡稱垃圾),這種時候就應(yīng)該回收掉這個變量值得內(nèi)存空間。

二、那么什么是垃圾回收機制

垃圾回收機制(簡稱GC)是Python解釋器自帶一種機,專門用來回收不可用的變量值所占用的內(nèi)存空間

三、為什么要用垃圾回收機制呢?

程序運行過程中會申請大量的內(nèi)存空間,而對于一些無用的內(nèi)存空間如果不及時清理的話會導(dǎo)致內(nèi)存使用殆盡(內(nèi)存溢出),導(dǎo)致程序崩潰,因此管理內(nèi)存是一件重要且繁雜的事情,而python解釋器自帶的垃圾回收機制把程序員從繁雜的內(nèi)存管理中解放出來。

四、垃圾回收機制的理解

1、堆區(qū)和棧區(qū)

在定義變量時,變量名與變量值都是需要存儲的,分別對應(yīng)內(nèi)存中的兩塊區(qū)域:堆區(qū)與棧區(qū)。

# 1、變量名與值內(nèi)存地址的關(guān)聯(lián)關(guān)系存放于棧區(qū)# 2、變量值存放于堆區(qū),內(nèi)存管理回收的則是堆區(qū)的內(nèi)容

2、直接引用和間接引用

直接引用指的是從棧區(qū)出發(fā)直接引用到的內(nèi)存地址。間接引用指的是從棧區(qū)出發(fā)引用到堆區(qū)后,再通過進一步引用才能到達的內(nèi)存地址。

x=10 # 10這個值被變量x直接引用list=[20,x] # 10這個值被列表list間接引用12

五、垃圾回收機制的原理分析

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

1、引用計數(shù)

變量值被變量名關(guān)聯(lián)得次數(shù)(包括間接引用和直接引用 ),一旦變量得引用計數(shù)得值變成0,占用內(nèi)存就會被回收。

2、引用計數(shù)得問題以及解決方案

問題一:循環(huán)引用

引用計數(shù)機制存在著一個致命的弱點,即循環(huán)引用(也稱交叉引用

list1=[111,]list2=[222,]list1.append(list2)list2.append(list1)print(list1,list2)[111, [222, [...]]] [222, [111, [...]]]# list1和list2之間相互引用# list1=[111的內(nèi)存地址,list2的內(nèi)存地址]# list2=[222的內(nèi)存地址,list1的內(nèi)存地址]x=10list=[2,3,x]print(list[2]) # 10x=123print(list[2]) # 10

這種時候一旦我們del list1,del list2,刪除列表的直接引用,只剩下list1和list2之間 的相互引用,這樣引用計數(shù)不是0,內(nèi)存空間無法回收,并且無法去到list1和list2的值(就是垃圾),這種時候python引入了“標(biāo)記-清除” 與“分代回收”來分別解決引用計數(shù)的循環(huán)引用與效率低的問題。

問題二:標(biāo)記清除

容器對象(比如:list,set,dict,class,instance)都可以包含對其他對象的引用,所以都可能產(chǎn)生循環(huán)引用。而“標(biāo)記-清除”計數(shù)就是為了解決循環(huán)引用的問題。標(biāo)記/清除算法的做法是當(dāng)應(yīng)用程序可用的內(nèi)存空間被耗盡的時,就會停止整個程序,然后進行兩項工作,第一項則是標(biāo)記,第二項則是清除。

問題三:效率問題

基于引用計數(shù)的回收機制,每次回收內(nèi)存,都需要把所有對象的引用計數(shù)都遍歷一遍,這是非常消耗時間的,于是引入了分代回收來提高回收效率,分代回收采用的是用“空間換時間”的策略。

問題四:分代回收

分代回收的核心思想是:在歷經(jīng)多次掃描的情況下,都沒有被回收的變量,gc機制就會認(rèn)為,該變量是常用變量,gc對其掃描的頻率會降低分代指的是根據(jù)存活時間來為變量劃分不同等級(也就是不同的代)

新定義的變量,放到新生代這個等級中,假設(shè)每隔1分鐘掃描新生代一次,如果發(fā)現(xiàn)變量依然被引用,那么該對象的權(quán)重(權(quán)重本質(zhì)就是個整數(shù))加一,當(dāng)變量的權(quán)重大于某個設(shè)定得值(假設(shè)為3),會將它移動到更高一級的青春代,青春代的gc掃描的頻率低于新生代(掃描時間間隔更長),假設(shè)5分鐘掃描青春代一次,這樣每次gc需要掃描的變量的總個數(shù)就變少了,節(jié)省了掃描的總時間,接下來,青春代中的對象,也會以同樣的方式被移動到老年代中。也就是等級(代)越高,被垃圾回收機制掃描的頻率越低

回收依然使用引用計數(shù)作為回收的依據(jù)

問題五:分代回收的缺點

例如一個變量剛剛從新生代移入青春代,該變量的綁定關(guān)系就解除了,該變量應(yīng)該被回收,但青春代的掃描頻率低于新生代,這就到導(dǎo)致了應(yīng)該被回收的垃圾沒有得到及時地清理。

沒有十全十美的方案:

毫無疑問,如果沒有分代回收,即引用計數(shù)機制一直不停地對所有變量進行全體掃描,可以更及時地清理掉垃圾占用的內(nèi)存,但這種一直不停地對所有變量進行全體掃描的方式效率極低,所以我們只能將二者中和。

綜上:

垃圾回收機制是在清理垃圾&釋放內(nèi)存的大背景下,允許分代回收以極小部分垃圾不會被及時釋放為代價,以此換取引用計數(shù)整體掃描頻率的降低,從而提升其性能,這是一種以空間換時間的解決方案目錄。

以上就是如何快速理解python的垃圾回收機制的詳細內(nèi)容,更多關(guān)于你理解python的垃圾回收機制么的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 上海乾拓贸易有限公司-日本SMC电磁阀_德国FESTO电磁阀_德国FESTO气缸 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 杭州成人高考_浙江省成人高考网上报名 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 |