victory的博客

长安一片月,万户捣衣声

0%

python | 垃圾回收机制

垃圾回收机制

Pyhton垃圾回收机制

1.引用计数
引用计数法的原理是: 每个对象维护一个ob_ref字段,用来记录该对象当前被引用的次数,每当新的引用指向该对象时,它的引用计数ob_ref加1,每当该对象的引用失效时计数ob_ref减1,一旦对象的引用计数为0,该对象立即被回收,对象占用的内存空间将被释放。
缺点: 无法解决循环引用
2.标记清除
Python采用了“标记-清除”(Mark and Sweep)算法,解决容器对象可能产生的循环引用问题。
标记阶段 遍历所有的对象,如果是可达的(reachable),也就是还有对象引用它,那么就标记该对象为可达;
清除阶段 再次遍历对象,如果发现某个对象没有标记为可达,则就将其回收。
优点: 解决了循环引用问题
缺点: 标记清除算法在执行很多次数后,程序的堆空间会产生一些小的内存碎片。
3.分代回收(假设新生代、中生代和老生代的threshold分别为700、10、10.)
· 每新增 701 个需要 GC 的对象,触发一次新生代 GC
· 每执行 11 次新生代 GC ,触发一次中生代 GC
· 每执行 11 次中生代 GC ,触发一次老生代 GC (老生代 GC 还受其他策略影响,频率更低)
· 执行某个生代 GC 前,年轻生代对象链表也移入该代,一起 GC
· 一个对象创建后,随着时间推移将被逐步移入老生代,回收频率逐渐降低

参考资料