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

未完待续,= =

相关推荐
胡耀超10 小时前
7、Matplotlib、Seaborn、Plotly数据可视化与探索性分析(探索性数据分析(EDA)方法论)
python·信息可视化·plotly·数据挖掘·数据分析·matplotlib·seaborn
长安——归故李10 小时前
【modbus学习】
java·c语言·c++·学习·算法·c#
tangweiguo0305198710 小时前
Django REST Framework 构建安卓应用后端API:从开发到部署的完整实战指南
服务器·后端·python·django
Dfreedom.10 小时前
在Windows上搭建GPU版本PyTorch运行环境的详细步骤
c++·人工智能·pytorch·python·深度学习
兴科Sinco11 小时前
[leetcode 1]给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数[力扣]
python·算法·leetcode
沐怡旸11 小时前
【算法--链表】138.随机链表的复制--通俗讲解
算法·面试
anlogic11 小时前
Java基础 9.10
java·开发语言·算法
程序员奈斯11 小时前
Python深度学习:NumPy数组库
python·深度学习·numpy
薛定谔的算法11 小时前
JavaScript单链表实现详解:从基础到实践
数据结构·算法·leetcode
yongche_shi11 小时前
第二篇:Python“装包”与“拆包”的艺术:可迭代对象、迭代器、生成器
开发语言·python·面试·面试宝典·生成器·拆包·装包