1. 我是皮皮虾首页
  2. 编程开发
  3. 后端
  4. Python

python后端开发面试-垃圾回收

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/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注