Python特殊机制之垃圾回收机制

垃圾回收机制

【1】参考博客:

【5.0】Python基础之垃圾回收机制 - Chimengmeng - 博客园 (cnblogs.com)

【2】博客摘要

  • 垃圾回收机制作为python解释器自带的一种功能,其目的在于帮助系统更好的管理内存,提高程序的运行效率

    • 垃圾回收机制,用来回收不可用的变量值所占用的内存空间(在内存中,没有变量名指向的数据都是垃圾数据)

    • 垃圾回收机制,引用计数为主,垃圾回收、分代回收为辅。

  • Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。

    • 在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。
  • 一个变量值可以有多个变量名指向,有一个变量名指向,引用计数就是1,有两个就是2

    • 只要引用计数不为0,这个变量值就不是垃圾数据,当引用计数为0了,说明这个变量值就没用了,就可以清除了
一个变量名只能指向一个内存空间: 意味着一个变量名在某一时刻只能代表一个值。当你给一个变量赋新值时,它将指向新的内存空间,不再指向之前的。
一个内存空间可以被多个变量名指向: 多个变量名可以同时指向相同的内存空间。这意味着如果你改变了这个内存空间的值,所有指向它的变量都会受到影响。
  • 较为复杂的底层机制,个人认为知晓操作逻辑即可

引用计数

当引用计数为0时,清除内存空间

直接引用与间接引用

标记清除

当内存空间占用到一定巨大的量时,会执行标记清除,清除所有我们通过直接引用调用不到的内存空间,哪怕它的引用次数不为0

eg : 当你出门遛狗,你把绳子放掉了,狗无法找回,当城管发现时,会将你的狗子回收清除

分代回收

高频率的扫描所有内存空间,效率较低,所以有了分代回收的概念

为变量打上“标签” ,根据标签,调整扫描频率

eg : 新任教师带班,第一天全部标记为新同学,检查作业,第二天同样全部检查,第三天将第一第二天都做作业的标记为良好学生,第四天检查新同学,并隔3天检查一次良好的同学,…… 每个同学每个阶段如果获得一定量的小红花次数,将减少扫描频率,只需要频繁扫描新同学即可,提高效率

posted @   Lea4ning  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示