python 是如何进行内存管理的?

  • 对象的引用计数机制

    • 引用计数增加的情况:
      • 一个对象分配一盒新名称
      • 将其放入一个容器中(如:列表、元祖或字典)
    • 用计数减少的情况:
      • 使用 del 语句对对象别名显示的销毁
      • 引用超出作用域或被重新赋值

    sys.getrefcount() 函数可以获取当前对象的引用计数

  • 垃圾回收机制

    • 当一个队形的引用计数归 0 时,它将被垃圾收集机制处理掉
    • 当两个对象 a 和 b 相互引用时, del 语句可以减少 a 和 b 的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的引用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄漏)为解决这个问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们
  • 内存池机制

    • Python 提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
      • Pymalloc 机制。为了加速 python 的执行效率,怕摇头晃脑 引入了一个内存池机制,用于管理对小块内存的申请和释放。
      • python 中所有小雨 256 个字节的随想都适用 pymalloc 实现分配器,而大的对象则使用系统的 malloc。
      • 对于 python 对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值