python垃圾回收机制是以引用计数为主,标记清除,分代回收为辅。
引用计数
在cpython中,引用计数的数据结构是这样的
typedef struct_object {
int ob_refcnt;
struct_typeobject *ob_type;
} PyObject;
ob_refcnt是记录对象被引用的次数,如果值为0,那么这个对象将会被系统回收。在python中可以使用下面方法查看对象引用次数
sys.getrefcount(对象名称)
标记清除
为了解决循环引用的问题,
跟其名称一样,该算法在进行垃圾回收时分成了两步,分别是:
- A)标记阶段,遍历所有的对象,如果是可达的(reachable),也就是还有对象引用它,那么就标记该对象为可达;
- B)清除阶段,再次遍历对象,如果发现某个对象没有标记为可达,则就将其回收。
分代回收
分代回收,将对象引用次数分为三个世代,通过引用计数扫描世代一的数据,如果对象的引用次数不为0,则会把对象存放到世代二,当再次扫描世代二的时候,发现引用计数还是不为0 ,则把对象存放到世代三。
层数越大,说明对象越活跃
原创文章,作者:站长,如若转载,请注明出处:https://wsppx.cn/856/%e7%bd%91%e7%bb%9c%e5%bc%80%e5%8f%91/

相关推荐
-
golang sync.waitgroup的一个错误用法
close位置问题 错误用法 正确用法 close()得在wait前面 控制每秒并发多个 添加 time.Sleep(time.Second)
-
Leecode – 反转单链表
原题 输入[1,2,3,4,5] 输出[5,4,3,2,1] https://leetcode-cn.com/problems/reverse-linked-list/ 解答 思路…
-
docker教程系列之docker是什么
简介 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructu…
-
python后端开发面试-redis缓存
默认16个数据库 五中数据结构 string list(列表) set(集合) zset(有序列表) hash(字典) 理解穿透、击穿、雪崩及其处理方法 redis怎样实现分布式锁…
-
记录一次go mod tidy/go get安装私库错误信息
执行语句 go get -u codeup.aliyun.com/xxxx/commonlib 错误信息如下 解决方式 问题原因是没有权限访问这个,如果是阿里云的codeup平台,…
-
go微服务一个错误:rpc error: code = Unimplemented desc = unknown service xxx
前言:当你的微服务需要连接其他的人的微服务,他会给你提供一个proto文件,当你调用他们的方法的时候,一直报错误:,一开始以为是服务地址写错了。后面查了一下,是go 语言中,pro…