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

未完待续,= =

相关推荐
xlq2232215 分钟前
22.多态(上)
开发语言·c++·算法
666HZ66617 分钟前
C语言——高精度加法
c语言·开发语言·算法
Wise玩转AI23 分钟前
Day 27|智能体的 UI 与用户交互层
人工智能·python·ui·ai·chatgpt·ai智能体
sweet丶25 分钟前
iOS MMKV原理整理总结:比UserDefaults快100倍的存储方案是如何炼成的?
算法·架构
s***46981 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
云里雾里!1 小时前
力扣 209. 长度最小的子数组:滑动窗口解法完整解析
数据结构·算法·leetcode
runepic1 小时前
Python + PostgreSQL 批量图片分发脚本:分类、去重、断点续拷贝
服务器·数据库·python·postgresql
〝七夜5691 小时前
JVM内存结构
java·开发语言·jvm
codists1 小时前
2025年11月文章一览
python
生而为虫2 小时前
31.Python语言进阶
python·scrapy·django·flask·fastapi·pygame·tornado