python垃圾回收机制
垃圾回收机制
什么为垃圾回收机制?
- 在内存中没人任何变量指向的数据
为什么要用到垃圾回收机制?
- 程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽,导致系统崩溃,所以回收无用的内存空间是一件很繁琐的事情,而python解释器自带的垃圾回收机制把这件繁琐的事情解放了出来。
在python中开发了一套自动化回收方案。
1. 引用计数
什么为引用计数:内存中变量值有几个变量引用他,引用计数就为几,引用计数为0即为垃圾。
比如:
x = 'aaa' 此时'aaa'这个数据引用计数为1
y = x 此时'aaa'这个数据引用计数为2
name = 'gary'
name = 'Gary'
print(name)
输出结果为 Gary。则name = 'gary' 引用计数为0即为垃圾 则被回收。
2.标记清除
当内存即将沾满的时候 python会自动暂停程序的执行 从头到尾将内存中数据进行扫描并打上标记 之后一次性清除掉标记的数据
它分为两个阶段:第一阶段是标记阶段,它会把所有的『活动对象』打上标记,第二阶段是把那些没有标记的对象『非活动对象』进行回收。那么它又是如何判断哪些是活动对象哪些是非活动对象的呢?
在上图中,我们把小黑圈视为全局变量,也就是把它作为root object,从小黑圈出发,对象1可直达,那么它将被标记,对象2、3可间接到达也会被标记,而4和5不可达,那么1、2、3就是活动对象,4和5是非活动对象会被它回收。
3.分代回收
分代回收会将数据的监管分为三个层次 随着层级的下降监督的频率降低
每新生成一个对象都会检查第0代有没有满,如果满了就开始着手进行垃圾回收.创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。同时,分代回收是建立在标记清除技术基础之上。分代回收同样作为Python的辅助垃圾收集技术处理那些容器对象.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)