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/
相关推荐
-
go开发生产上使用的dockerfile 模板
避免重复写Dockerfile,可以借用下面的dockerfile模板 新建Dockerfile 在Dockerfile同级别目录执行,把hello-word替换成你的项目名称(跟…
-
面试题:mysql中自己实现自增id
面试官其实想考察的是如何实现分布式趋势自增ID。在mysql中如果给字段增加auto_increment属性,但是出现分库分表分布式的场景,那么单表的自增id并不少全局自增。 ID…
-
Python通过mac地址唤醒电脑
需求 家中nas需要定时唤醒 远程在外唤醒家中的电脑 直接上代码 说明 mac地址可以在自己的路由器中获取 网络唤醒,需要被唤醒的机器主板支持网络唤醒,记得在bios设置 通过外网…
-
http/https协议面试题
如何你的简历上写了熟悉http协议的,那就要准备这个面试了 http是长连接吗? 在http1.0的时候是短连接,每次与服务端通信都需要建立新的连接,也就是三次握手 在http1….
-
安装gitlab runner 和配置.gitlab.yaml 实现自动化cicd
前面有讲到如何安装gitlab,它本身不仅仅可以实现代码仓库版本管理,当然可以做到cicd,简化手动部署到烦扰,实现自动化编译和部署 要做实现cicd,如果是虚拟机部署到话,当然离…
-
n1docker存储空间不足
复现 查看存储情况 overlay use 100% 查看docker 存储空间 先删除一些镜像 如果删除镜像都报错,那就随便找一个10m以上的文件删除,不然命令都执行不了 删除一…
-
golang同目录调用其他文件函数的用法
问题复现 解决方法 这个应该是新手常见的问题,golang的包管理方式,这个运行错误是由于你执行了main.go,而没有编译其他go文件,当然不知道run函数哪里来的 正确方式 g…
-
前端面试题:Http code 301和 302区别
总结:301是永久跳转并且有缓存,而302是临时跳转,没有缓存。 使用场景:当迁移域名当时候,网站域名是永久性转移,这时可以用301; 而当只是在服务器内部跳转,比如访问服务器a….
-
docker教程系列之docker怎么构建镜像
在前面一章我们讲到了如何使用docker,这一章将会讲到如何把我们的项目打包成docker镜像,这种需求在我们的工作中很非常常见的,下面将会分别讲到dockerfile文件构成,后…