python的内存回收机制

liftword1个月前 (03-20)技术文章10

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内存管理

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

Python 的内存管理与垃圾回收

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者| 慕课网精英讲师 朱广蔚1. 内存管理概述1.1 手动内存管理在计算机发展的早期,编程语言提供了手动内存管理的机制,例如...

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

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

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

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