python之内存管理

前言

python中,万物皆对象。

因此,内存的管理,便是管理对象从创建到销毁的过程。有效地管理内存,既可以减少内存碎片,又可以避免内存泄漏等现象(大概讲讲)。

内存的分配

Python内部对于内存分配的申请做了分情形处理。具体如下:

1、当申请的对象创建所需内存小于等于512字节时,内存的分配将由针对短生命周期的小对象进行了优化pymalloc 分配器处理。它使用名为"arena"的内存映射,在 32 位平台上的固定大小为 256 KiB,在 64 位平台上的固定大小为 1 MiB。

2、当申请的对象创建所需内存大于512字节时,它会回退为 PyMem_RawMalloc() 和 PyMem_RawRealloc()。向操作系统申请分配内存。

上文讲到的pymalloc,便是内存池机制的python实现,内存池将预申请的内存为小、中、大三种,进而规范小碎片内存的获取。让内存被释放时,会将临近的未被占用的内存碎片与释放的内存合并。在处理符合条件的内存申请是,pymalloc会先判断是否能从内存池分配,如果不够,再向操作系统请求分配。

内存的回收

内存的回收可分为自动回收与手动回收

手动回收,我们可以通过调用garbage.collect()回收不可回收(uncollectible)的内容,只要删了吧,就算是在循环中被嵌套也会被回收

自动的情况为:

变量在被引用时,我们会做对引用的次数做计数,取消引用时减一,新增引用时加一。若引用为零,则会自动回收。

若存在循环,

对于存在循环引用的情况,有两种处理方式:

1、一种是达到阈值(分三代0,1,2,每一代有默认阈值,也可以自行配置)时触发的自动回收

2、一种是程序退出时的自动回收

未完待续,= =

相关推荐
一只小波波呀36 分钟前
打卡第48天
python
eachin_z40 分钟前
力扣刷题(第四十九天)
算法·leetcode·职场和发展
闻缺陷则喜何志丹1 小时前
【强连通分量 缩点 拓扑排序】P3387 【模板】缩点|普及+
c++·算法·拓扑排序·洛谷·强连通分量·缩点
zstar-_1 小时前
一套个人知识储备库构建方案
python
鸽子炖汤1 小时前
Java中==和equals的区别
java·开发语言·jvm
Amo Xiang1 小时前
《100天精通Python——基础篇 2025 第5天:巩固核心知识,选择题实战演练基础语法》
python·选择题·基础语法
机器学习之心1 小时前
机器学习用于算法交易(Matlab实现)
算法·机器学习·matlab
江梦寻1 小时前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式
AL流云。1 小时前
【优选算法】C++滑动窗口
数据结构·c++·算法
霖檬ing1 小时前
Python——MySQL远程控制
开发语言·python·mysql