美文网首页
python内存管理

python内存管理

作者: 转身丶即天涯 | 来源:发表于2020-01-15 23:00 被阅读0次

对象的引用计数

在python中所有的对象都有引用计数,可能通过sys.getrefcount()函数来获取某个对象的引用计数。
下列情况,引用计数会增加:

    1. 给对象分配一个新的名称


      image.png
    1. 将某个对象放入容器(list, dict, tuple, set)中时


      image.png

下列情况,引用计数会减少:

    1. 使用del销毁一个对象


      image.png
    1. 引用超出作用域,或者被重新赋值时


      image.png

垃圾回收

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

内存池

python提供了垃圾回收机制来回收引用计数为0的对象,但是并没有将释放的内存返还给操作系统,而是将释放的内存放入了内存池。

  1. Pymalloc机制。
    为了加速python的执行效率,python引入了一个内存池机制,用于管理对小块内存的申请和释放。
  2. python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。
  3. 对于python对象,像整数、浮点数、List,都有其独立的私有内存池,对象间不共享他们的内存池。
    也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

相关文章

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

  • 深入理解Python内存管理与垃圾回收,再也不怕问了(一)

    面试官:听说你学Python?那你给我讲讲Python如何进行内存管理? 我:???内存管理不太清楚额。。。 面试...

  • python内存释放

    Python内存释放 python话说会自己管理内存,实际上,对于占用很大内存的对象,并不会马上释放。举例,a=r...

  • 新手上路?八大秘术助你offer无数(Python初学者/码农必

    话不多说,干货: 1、Python是如何进行内存管理的? Python的内存管理主要有三种机制:引用计数机制、垃圾...

  • 面试日记--python的内存管理

    面试中被问到python的内存管理,只是说是python有自己的内存管理机制,有自己的垃圾回收机制,却不能详细作答...

  • Python基础知识

    一、Python简介 Python 是一种解释型语言,在 Python 中,由于内存管理是由 Python ...

  • python(Class7)

    内存管理之循环引用 在Python3.x中,内存管理问题基本上不会出现,类似与OC中的ARC机制在Python2....

  • Python3学习 - 第二节

    为什么说Python采用的是基于值的内存管理模式? Python采用的是基于值的内存管理方式,如果为不同变量赋相同...

  • iOS ARC

    内存管理 引用计数:Objective-C Python 垃圾收集:C#,Java等 区别 内存管理的基本规则 自...

  • Python内存管理机制

    转载: Python内存管理机制 c/c++中:通过malloc和free进行内存的申请和释放 python/ja...

网友评论

      本文标题:python内存管理

      本文链接:https://www.haomeiwen.com/subject/dlsxzctx.html