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、一种是程序退出时的自动回收

未完待续,= =

相关推荐
鸽鸽程序猿24 分钟前
【JavaSE】简单理解JVM
java·jvm
小毛驴85025 分钟前
JDK主流版本及推荐版本
jvm
林shir40 分钟前
Java基础1.7-数组
java·算法
Jeremy爱编码1 小时前
leetcode课程表
算法·leetcode·职场和发展
清水白石0081 小时前
《深入 Python 上下文管理器:contextlib.contextmanager 与类实现方式的底层差异全景解析》
开发语言·python
程序员佳佳1 小时前
GPT-4时代终结?GPT-5.2与Banana Pro实测数据公开,普通开发者如何接住这泼天富贵
开发语言·python·gpt·chatgpt·重构·api·midjourney
甄心爱学习1 小时前
SVD求解最小二乘(手写推导)
线性代数·算法·svd
努力学算法的蒟蒻1 小时前
day46(12.27)——leetcode面试经典150
算法·leetcode·面试
Blockbuater_drug2 小时前
InChIKey: 分子的“化学身份证”,从哈希原理到全球监管合规(2025)
算法·哈希算法·inchikey·rdkit·分子表达·化学信息学
Blossom.1182 小时前
多模态大模型LoRA微调实战:从零构建企业级图文检索系统
人工智能·python·深度学习·学习·react.js·django·transformer