垃圾回收机制

引用计数
1. 原理
  1.当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1

  当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

2. 优点
   引用计数有一个很大的优点,即实时性,任何内存,一旦没有指向它的引用,就会被立即回收,而其他的垃圾收集技术必须在某种特殊条件下才能进行无效内存的回收。
3. 缺点
  1)引用计数机制所带来的维护引用计数的额外操作与Python运行中所进行的内存分配和释放,引用赋值的次数是成正比的,
  2)这显然比其它那些垃圾收集技术所带来的额外操作只是与待回收的内存数量有关的效率要低。
  3)同时,因为对象之间相互引用,每个对象的引用都不会为0,所以这些对象所占用的内存始终都不会被释放掉。
2、标记-清除
  1. 说明
    1)标记-清除: 只关注那些可能会产生循环引用的对象,
    2)像是PyIntObject、PyStringObject这些不可变对象是不可能产生循环引用的,因为它们内部不可能持有其它对象的引用。
    3)Python中的循环引用总是发生在container对象之间,也就是能够在内部持有其它对象的对象,比如list、dict、class等等。
    4)这也使得该方法带来的开销只依赖于container对象的的数量.
    缺点:标记和清除的过程效率不高
  2、原理
   1)基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点
     2)以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放
3、分代回收
  1)将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。
  2)也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
  3)那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

posted @ 2020-03-26 19:30  Handsome、Snake  阅读(149)  评论(0编辑  收藏  举报