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/

相关推荐
-
面试万科物业-高级Python
一共四轮面试,一面基础面试,体验还行,比较轻松,二面(深度技术面试)和三面(项目稳定性)跑过去既然电话面试?我在家不能电话面试吗?来回3个小时,我真的。。 四面是Hr总监面试,视频…
-
重学Python基础篇(一)之认识python
前言 在我刚毕业的时候Python语言就非常火了,随之而来的就是招人单位,python岗位的激增,但同时增加的还有培训单位,这也造成了市场的饱和。就我个人而已,python web…
-
前端学习记录之一:函数式编程
本节回顾 1.函数式编程(核心思想:把运算过程抽象成函数) 2.函数相关复习(函数是一等公民,高级函数,闭包) 3.函数式编程基础(lodash,纯函数,柯里化,管道,函数组合) …
-
golang基础面试题
自己除了找python相关的岗位,还想找一下go的岗位,有转语言的倾向。但我自由半年的项目经验。 谈谈对defer的认识 defer用于资源的释放,会在函数返回之前进行调用,它会经…
-
golang net http一个低级错误
错误信息 原因 在go中http/net不像python的requests,封装的没有那么全,默认没有加body类型。 解决方式 request.Header.Set(“…
-
面试题:mysql中自己实现自增id
面试官其实想考察的是如何实现分布式趋势自增ID。在mysql中如果给字段增加auto_increment属性,但是出现分库分表分布式的场景,那么单表的自增id并不少全局自增。 ID…
-
记录一次go mod vendor 没有同步所有的package
注意 :go mod vendor 只同步被代码使用过或者引用过的package,如果你发下go mod tidy明明将包都下载下来了,但是vendor文件夹少了几个package…