python内存回收机制--垃圾回收机制

前言

垃圾回收机制,可以说是引用计数器机制的补充机制
一般的对象,完全可以通过引用计数器的机制进行释放和回收,但是如果两个对象产生了循环引用,引用计数器的机制就无法进行检测和释放

主要作用:

从经历过“引用计数器机制”仍未被释放的对象中,找到循环引用的对象,并进行释放和回收

底层机制:

  • 收集所有的“容器对象”,通过一个双向链表进行引用

注意
垃圾回收机制是解决循环引用的问题,循环引用的前提是这个对象可以引用其他对象,所以垃圾回收机制主要检测的容器对象!!!而不是非容器对象、
对于非容器对象的内存管理,python也提供了机制,比如缓存机制,本文暂不多赘述

  • 针对于每一个“容器对象”,通过一个变量gc_refs来记录当前对应的引用计数
  • 对于每个“容器对象”,找到它引用的“容器对象”,并将这个“容器对象”的引用计数-1
  • 经过步骤3之后,如果一个“容器对象”的引用计数为0,它肯定是“循环引用”,就代表它可以被释放回收了

流程图:

经历过引用计数器机制还没被回收的,只有2种可能:
a,正在使用的,引用计数!=0
b,互相循环引用的对象
在这里插入图片描述

如何提升查找循环引用的性能?

但是上面的步骤是非常耗时的,因为在第一步它会把所有的容器对象都放到双向链表里,在双向链表再检测有没有引用其他的容器对象,如果程序中创建了很多个容器对象,这样做会比较浪费性能
基于这个问题,产生了一种假设:
命越大的对象,越长寿
假设一个对象10次检测都没有释放,那认定这个对象一定很长寿,就减少这个对象的“检测频率”
基于这种假设,涉及了一套机制:
分代回收机制
且看下回讲解

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值