[基础][垃圾回收] 1 引用计数

1. 前言

垃圾回收,主要通过引用计数进行垃圾回收;通过 “标记-清除” 解决容器对象可能产生的循环引用问题;通过 “分代回收” 以空间换时间的方法提高垃圾回收效率。

今天介绍引用计数。

https://zhuanlan.zhihu.com/p/83251959

2. 什么是引用计数

原理:每个对象维护一个ob_ref字段,用来记录此对象被引用的次数。

导致引用计数+1的情况:

  1. 对象被创建,例如a=1
  2. 对象被引用,例如b=a
  3. 对象被作为参数,传入到一个函数中,例如func(a)
  4. 对象作为一个元素,存储在容器中,例如list1=[a,a]

导致引用计数-1的情况:

  1. 对象的别名被显式销毁,例如del a
  2. 对象的别名被赋予新的对象,例如a=2
  3. 一个对象离开它的作用域,例如f函数执行完毕时,func函数中的局部变量(全局变量不会)
  4. 对象所在的容器被销毁,或从容器中删除对象
sys.getrefcount(a)查看引用计数的次数

3.引用计数的缺点

 循环引用:假如内部产生两个循环调用的时候,就算删除掉外部的两个引用,这两个实例都不会被回收机制回收,因为他们仍然存在引用

 实例待补全。

posted @ 2020-03-11 10:22  fly_pig  阅读(164)  评论(0编辑  收藏  举报