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/
相关推荐
-
记录一次引用其他微服务的proto文件,修改了message 中的字段的问题
背景 有2个微服务A和B,在A微服务中引用了B的proto,也就是请求A服务,A服务调用B服务的内容,并且修改了其中一个message中的字段,修改的proto文件message的…
-
Docker安装Jenkins
简介 在开发过程中,devops搭建,ci集成工具选择Jenkins是不二之选 安装 安装docker centos7 创建jenkins目录 运行docker 如果用做cicd,…
-
记一次Proto Http请求报错问题:unKnow error: proto: (line 1:9): invalid value for int32 type: 100100013100
背景 kratos支持rpc和http方式进行通信,由于不同集群,不能进行内网通信,最终还是用http的方式,由于部门用的都是kratos,因此可以不用修改原来的通信方式,只是将之…
-
记录一次go mod tidy/go get安装私库错误信息
执行语句 go get -u codeup.aliyun.com/xxxx/commonlib 错误信息如下 解决方式 问题原因是没有权限访问这个,如果是阿里云的codeup平台,…
-
安装gitlab runner 和配置.gitlab.yaml 实现自动化cicd
前面有讲到如何安装gitlab,它本身不仅仅可以实现代码仓库版本管理,当然可以做到cicd,简化手动部署到烦扰,实现自动化编译和部署 要做实现cicd,如果是虚拟机部署到话,当然离…
-
docker教程系列之docker怎么用
前面一章介绍了docker是什么,相信大家应该对docker有个初步对认识,docker的出现就是方便大家更加方便快捷的部署、迁移服务,也更好的隔离服务环境。既然大家都知道了doc…
-
前端面试题整理(持续收集,后期补充答案)
HTTP协议相关 HTTP建立连接之tcp三次握手 HTTP断开连接之tcp四次挥手 缓存:强缓存与协商缓存 网络七层协议 浏览器输入一个网址,到页面展示这中间经历了什么? HTT…