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 设置垃圾回收阈值(收集频率)
避免循环引用

相关推荐
94621931zyn61 小时前
关于应用 - Cordova 与 OpenHarmony 混合开发实战
笔记·python
知远同学6 小时前
Anaconda的安装使用(为python管理虚拟环境)
开发语言·python
Blossom.1186 小时前
AI编译器实战:从零手写算子融合与自动调度系统
人工智能·python·深度学习·机器学习·flask·transformer·tornado
热爱专研AI的学妹7 小时前
数眼搜索API与博查技术特性深度对比:实时性与数据完整性的核心差异
大数据·开发语言·数据库·人工智能·python
Mr_Chenph7 小时前
Miniconda3在Windows11上和本地Python共生
开发语言·python·miniconda3
智航GIS9 小时前
5.1 if语句基础
开发语言·python
华研前沿标杆游学10 小时前
2026年湖南省工业旅游线路
python
APIshop10 小时前
深入解析京东API接口:如何高效获取商品详情与SKU信息
python
94621931zyn610 小时前
备份恢复 - Cordova 与 OpenHarmony 混合开发实战
python
PNP Robotics10 小时前
PNP机器人受邀参加英业达具身智能活动
大数据·人工智能·python·学习·机器人