翼度科技»论坛 编程开发 python 查看内容

垃圾回收机制

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
垃圾回收机制

什么是垃圾回收机制
  1. 垃圾回收机制是专门回收没有被变量名绑定的垃圾数据 用来释放空间
复制代码
引用计数

引用计数就是数据值与变量名之间绑定的次数
  1. age = 18      #数据值18的引用计数为1
  2. 引用计数增加:
  3.     x = age       #数据值18的引用计数为2
  4.     '把age的内存地址给了x,此时age和x都绑定了18 所以18的引用计数为2'
  5. 引用计数减少:
  6.     age = 20      #数据值18的引用计数变成1
  7.     '变量名age与数据值18解除绑定,再与20绑定,所以数据值18的引用计数从2变成了1'
  8.     del x         #数据值18的引用计数变成0
  9.     '解除变量名m的绑定关系,所以数据值18没有变量名绑定,引用计数就从1变成了0'qw
复制代码

引用计数:当数据值身上的引用计数为0时 就会被当成垃圾回收机制回收 不为0则不会回收
缺陷:引用计数可能会造成循环引用问题
标记清除

标记清除主要是解决循环引用的问题
​        哪些情况会使引用计数增加:
  1.                 被变量名绑定时
  2. ​                被列表索引和字典k索引时
复制代码
​        什么情况下 引用计数会减少
  1.                 变量名与数据值解除绑定时
  2. ​                索引的列表或字典被回收时
复制代码
引用计数来解决垃圾问题是有隐患的 >> 循环问题
  1. # 看以下一段程序
  2. l1 = ['a']  # 两变量分别绑定了一个列表
  3. l2 = ['b']  # 两个不同的列表分别引用计数为1
  4. l1.append(l2)  # l1 = ['a', l2]  列表2的引用计数加为2
  5. l2.append(l1)  # l2 = ['b', l1]  列表1的引用计数加为2
  6. del l1  # l1变量断开,列表1引用计数-1
  7. del l2  # l2变量断开,列表2引用计数-1
复制代码

我们可以发现 最终内存中的数据值已经没有变量绑定了 找不到了 符合垃圾的定义 但是身上还有计数 没有被回收
所以就产生了可一个机制 :
​        当内存占用达到临界点时 程序就会停止运行 扫描程序中的所有数据值 把产生循环的数据打上标记 最最后统一清除掉 >> 标记清除
分代回收
  1. 分代回收一般分为三代:
  2.         新生代 青春代 老年代
  3.     数据值身上的计数越多 越不容易被清除 所以越容易放在下面
  4.     越往下 扫描间隔的时间越长 越在上面扫间隔的时间越短
复制代码


来源:https://www.cnblogs.com/lzy199911/p/17057756.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具