python的内存管理机制

python的内存管理机制主要分为三个部分:引用计数、垃圾回收和内存池机制。

引用计数机制:

python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数,当对象不再被使用时,引用计数为0,python就会自动释放该对象所占用的内存。引用计数的python内存管理机制的基础。

通过它可以快速的回收不再被使用的对象。

Python使用引用计数来跟踪对象的引用情况。每当一个对象被引用时,它的引用计数就会加1;

当一个对象的引用被删除时,它的引用计数就会减1。当一个对象的引用计数为0时,说明没有任何引用指向它,这时垃圾回收机制会将其所占用的内存释放掉。引用计数是一种简单而高效的内存管理方式,但它无法解决循环引用的问题。

python 复制代码
import sys
a =[]
b=a
count = sys.getrefcount(a)
print( count )
#a 的引用计数值为 3,因为有 a、b 和作为 refcount 都引用了一个空列表

垃圾回收机制(简称GC garbage collection):

python使用垃圾回收器来清理那些引用计数为0的对象所占用的内存。

python中的垃圾回收机制主要有两种:标记清除和分代回收。

标记清除是python最早的垃圾回收算法

分代回收是pyton的另一种垃圾回收算法,它将内存分为三代,每一代的存活时间越长,就越不容易被回收。

除了引用计数外,Python还使用垃圾回收机制来处理循环引用等无法通过引用计数解决的内存管理问题,垃圾回收机制会定期检查程序中的对象,找出那些没有被引用的对象,并将其释放掉。Python使用的垃圾回收算法是基于分代的垃圾回收算法,即将对象分为不同的代,根据对象的存活时间来决定何时进行垃圾回收。一般情况下,新创建的对象会被分配到第0代,如果经过一定的时间后仍然存活,则会被晋升到下一代。垃圾回收机制会根据不同代的对象进行不同频率的回收,以提高垃圾回收的效率。

内存池机制:

python中的内存池是一个缓存区,用于管理小于256个字节的对象的内存分配。

当对象的大小小于256K时,python会使用内存池进行内存分配,

否则就会直接调用C标注库中的malloc/realloc等函数进行内存分配。

内存池的作用就是避免了频繁地进行内存分配和释放,从而提高了程序的执行效率。

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统

对于Python对象,以下几种情况,都有其独立的私有内存池。(字符串的驻留机制)

1、字符串长度为0或者1

2、符合标识符的字符串(只包含字符数字下划线)

3、字符串只在编译时进行驻留,而非运行时

4、[-5,256]之间的整数数字

怎么优化内存管理

手动垃圾回收

先调用del a;再调用gc.collect()即可手动启动GC(嵌套的引用删除不了,因为引用计数为1)
调高垃圾回收阈值

gc.set threshold 设置垃圾回收阈值(收集频率)
避免循环引用

相关推荐
yannan2019031314 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁24 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev26 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子40 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python44 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder2 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词