美文网首页
python的GC

python的GC

作者: 伟大的洪立 | 来源:发表于2018-08-01 13:20 被阅读0次

    python垃圾回收机制

    Python GC 主要是引用计数来跟踪和回收垃圾。 在引用技数的基础上, 通过"标记-清除"解决容器可能产生的循环引用问题, 通过过"分代回收"以空间换时间的方法提高垃圾回收效率。

    引用计数

    Pyobject 是每个对象必有的内容, 其中ob_refcnt就是做为引用计数。 当一个对象有新的引用时, 它的ob_refcnt就会增加,当引用它的对象被删除, 它的ob_refcent就会减少, 引用计数为0时, 该对象生命就结束了。
    优点:简单, 实时性
    缺点: 维护引用计数消耗资源, 循环引用

    标记清除

    基本思路是先按需分配, 等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点,以引用为边构成的图, 把所有可以访问到的对象打上标记, 然后清除一边内存空间, 把所有没标记的对象释放。

    分代技术

    分代回收的整体思想是:将系统中的所有内存根据其存活时间划分为不同的集合,每个集合就成为一个"代", 垃圾收集频率随着"代"的存活时间的增大而减小, 存活时间通常利用经过几次垃圾回收来度量。
    Pyhon默认定义了三代对象集合, 索引数越大, 对象存活时间越长。

    举例: 当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M划到一个集合A中去,而新分配的内存都划分到集合B中去。当垃圾收集开始工作时,大多数情况都只对集合B进行垃圾回收,而对集合A进行垃圾回收要隔相当长一段时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。在这个过程中,集合B中的某些内存块由于存活时间长而会被转移到集合A中,当然,集合A中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被延迟。
    转载:
    https://github.com/taizilongxu/interview_python#unix%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E6%96%B9%E5%BC%8Fipc

    相关文章

      网友评论

          本文标题:python的GC

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