美文网首页python
Python垃圾回收机制

Python垃圾回收机制

作者: 程序员同行者 | 来源:发表于2018-10-29 22:37 被阅读0次

Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。

1、引用计数

PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。

优点

  • 简单
  • 实时性

缺点:

  • 维护引用计数消耗资源
  • 循环引用
2、标记-清除机制

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

3、分代技术

分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。

Python默认定义了三代对象集合,索引数越大,对象存活时间越长。

举例:

当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M划到一个集合A中去,而新分配的内存都划分到集合B中去。当垃圾收集开始工作时,大多数情况都只对集合B进行垃圾回收,而对集合A进行垃圾回收要隔相当长一段时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。在这个过程中,集合B中的某些内存块由于存活时间长而会被转移到集合A中,当然,集合A中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被延迟。

相关文章

  • python和ruby的GC

    Python垃圾回收机制--完美讲解!

  • python拾遗7 - 垃圾回收

    垃圾回收机制 相比 C++ 的手动回收内存,python 的垃圾回收机制可谓是省心省力,判断是否回收一块内存,主要...

  • python面试题(五)

    1、简述python引用计数机制(联想到垃圾回收机制)python垃圾回收主要以引用计数为主,标记-清除和分代清除...

  • Python垃圾回收机制

    垃圾回收机制: Python中的垃圾回收算法是采用引用计数, 当一个对象的引用计数为0时, Python的垃圾回收...

  • Python的垃圾回收机制,可变类型,不可变类型

    Python的垃圾回收机制 什么是GC(垃圾回收机制),出现的原因 GC:说白了就是内存自动管理机制.它的出现的原...

  • python学习一

    1 python 如何管理内存 对象引用计数机制,垃圾回收机制,内存池机制 一。对象引用机制 python内部引用...

  • python的GC

    python垃圾回收机制 Python GC 主要是引用计数来跟踪和回收垃圾。 在引用技数的基础上, 通过"标记-...

  • Day11-Python垃圾回收机制笔记

    Python中的垃圾回收是以引用计数为主,标记清除和分代回收为辅。 【引用计数】 Python默认的垃圾收集机制是...

  • Python36_垃圾回收

    注意,垃圾回收机制的测试建议以交互模式测试 ps:对于垃圾回收机制,有的python版本默认开了,有的则默认没有开...

  • JavaScript的垃圾回收机制

    大纲 1、认识垃圾回收机制2、垃圾回收机制的原理3、垃圾回收机制的标记策略4、垃圾回收机制与内存管理 1、认识垃圾...

网友评论

    本文标题:Python垃圾回收机制

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