python的内存回收机制

liftword2个月前 (03-20)技术文章17

1.python内存存储相关

堆和栈

堆:Python中的堆存储一般存储的是对象相关的信息如 对象的数据(字典列表等),堆内存是由 Python 的内存管理器控制的,堆内存的生命周期不受函数调用栈影响。

栈:栈中存储的是函数的参数,以及相关的函数变量,此栈是通过操作系统控制管理的,程序结束时会自动清理。

引用计数

每个对象都有一个引用计数器,表示该对象被引用的次数。每当有一个新的引用指向该对象时,引用计数增加;当引用失效时,计数减少。当一个对象的引用计数变为 0 时,表示该对象不再被使用,Python 会自动回收这块内存。

缺点:如果存在循环引用,即两个或多个对象相互引用而没有外部引用,这些对象的引用计数永远不会变为 0,从而导致内存泄漏。

GC的垃圾回收

为了应对引用计数的局限,Python 使用 垃圾回收器(GC)来检测和回收循环引用。Python 的垃圾回收使用的是 分代回收算法,通过将对象分成不同的代(generation)来优化回收效率。

  • 分代回收:Python 将对象分为三个代(generation):
  • 第 0 代:新创建的对象,引用计数高的对象容易被回收。
  • 第 1 代:经过多次回收后还存活的对象。
  • 第 2 代:非常长时间存活的对象。
    对象在每一代的存活时间越长,它的回收频率越低。较老的对象不太可能有垃圾回收的机会,因此 Python 会更频繁地回收年轻代的对象。

相关文章

分享一个文件整理使用Python小脚本(删除相同文件减小内存占用)

写在前面:脚本作用:在目标文件夹中筛选出大小相同的文件,并打印在屏幕上,这样可以快速找出相同文件,释放硬盘内存。前期部署:安装python并做好配置环境变量(基础)先上代码:import osfrom...

python如何进行内存管理

关于首先python进行内存管理就不得不提到Python解释器在何种情况下会释放变量的内存。Python引用了内存计数这一简单的计数来控制。当一个变量的引用计数为0的时候,就会被解释器回收。当然在交互...

一文掌握Python内存管理

Python中的内存是由Python内存管理器(Python memory manager)来管理的,它涉及到一个包含所有Python对象和数据结构的私有堆(heap)。Python内存管理器有不同的...

喂!你这个python的内存是不是爆了?喏,拿这个去测试一下看看

你是否曾经为python程序的内存占用问题头疼不已?是否觉得内存泄漏、对象占用过多内存等问题难以排查?别急,今天我要介绍一个神器——pympler,让你轻松搞定python内存分析!01什么是pymp...

面试必备:Python内存管理机制(建议收藏)

什么是内存管理器(what)Python作为一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存管...

解锁 Python 中的内存效率:高级开发都在这样管理内存

#秋日生活打卡季#利用 del 和 gc.collect() 实现最佳性能你有没有遇到过 Python 程序运行得越来越慢?也许它消耗的内存超出了你的预期,却不知道原因。如果你有类似的经历,那你并不...