Python 内存管理机制 引用计数 垃圾回收 内存池

本文详细介绍了Python的内存管理机制,包括引用计数、标记清除、分代回收和内存池的概念。探讨了引用计数的优点和缺点,以及如何解决循环引用问题。同时,解释了Python如何通过内存池机制优化小块内存的分配和释放,减少内存碎片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python内存管理机制: 引用计数 垃圾回收 内存池

  • 引用计数

    当Python对象被引用时其引用计数+1,当其不再被一个变量引用时计数-1,引用计数=0时对象被删除
    python里万物皆对象,核心就是一个结构体 : PyObject
    在这里面 ob_refcnt 就是引用计数

    优点:
    简单 实时性,处理回收内存的时间分摊到了平时
    缺点:
    维护引用计数消耗资源 解决不了循环引用

  • 垃圾回收

    1. 引用计数(主)

    引用计数也是一种垃圾回收机制,最简单的垃圾回收机制.当某个对象的引用计数=0时,该对象就要成为被回收的垃圾了. 但是如果出现循环引用的话,会造成内存泄露,引用计数机制不再有效

    1. 标记清除(辅)

    只关注可能产生循环引用的对象.如果两个对象的引用计数都为1,并且仅仅存在他们之间的循环引用,也就是实际有效引用都为0.所以此时需要将循环引用去掉 缺点:额外操作和需要回收的内存块成正比

    1. 分代回收(辅)

    将系统中的所有内存块根据存活时间划分成不同的集合,每一个集合称为一个’代’,垃圾收集的频率随着’代’的存活时间的增大而减小.衡量存活时间: 如果一个对象经过的垃圾收集次数越多,则存活时间越长

  • 内存池

    1.Python 内存机制呈现金字塔形状 -1,-2层主要有操作系统进行操作
    2.第0层 是C中的malloc,free等内存分配和释放函数进行操作
    3.1,2层是内存池,由 Python的接口函数PyMem_Malloc函数实现,当对象小于256K时由该层进行内存分配
    4.第3层,对Python对象的直接操作

    由于在C中频繁调用malloc与free时,会产生性能问题,并且频繁分配和释放小块内存时会产生内存碎片,所以Python引入了内存池机制:
    如果请求分配内存在1 ~256字节之间,就使用自己的内存管理系统(实际上还是调用malloc分配内存,只是每次分配的内存是256k)–PyMen_Malloc,否则直接使用malloc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值