美文网首页
python-垃圾回收机制

python-垃圾回收机制

作者: 少女萌的进击之路 | 来源:发表于2021-08-03 14:54 被阅读0次


前言

Python中,主要通过引用计数(Reference Counting)进行垃圾回收。

引用计数

在Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。

程序在运行的过程中会实时的更新 ob_refcnt 的值,来反映引用当前对象的名称数量。

当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。

但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。

sys.getrefcount() 可以查看对象的引用次数,先自己先有个class 创建一个对象,此时引用次数是1,由于 sys.getrefcount() 也会引用一次,所以看到的会在引用次数基础上+1

引用计数概念 引用计数tips:1.引用计数是对同一块内存空间的引用计数;完全相同的引用计数一次

导致引用计数 +1 的情况:每声明一种可以访问到对象的办法则+1

对象被创建,例如 a=23

对象被引用,例如 b=a

对象被作为参数,传入到一个函数中,例如func(a)

对象作为一个元素,存储在容器中,例如list1=[a,a]

导致引用计数-1 的情况

对象的别名被显式销毁,例如del a

对象的别名被赋予新的对象,例如a=24

一个对象离开它的作用域,例如 f 函数执行完毕时,func函数中的局部变量(全局变量不会)

对象所在的容器被销毁,或从容器中删除对象

对象销毁

下面代码a增加一次引用,赋值给a后,b和a都是指向同一个对象,当我们不用的时候就可以用del 销毁对象a和b

对象作为参数,传到函数里面也会被引用一次,看下面这个案例

问题:gc.collect()的作用是啥呢?为什么g的引用还在,并没回收呀

a、b、c、d、e、f、g 这些变量全部指代的是同一个对象,而 sys.getrefcount() 函数并不是统计一个指针,而是要统计一个对象被引用的次数,所以最后一共会有 8 次引用。

如果我们一个个去销毁对象,很显然会浪费时间,于是可以用gc来垃圾回收了,gc.collect() 即可手动启动垃圾回收

循环引用

当a对象引用b,b对象也引用a,两个互相引用的时候,互相引用导致它们的引用数都不为 0。

初始化的时候,会生成一个大的列表[i for i in range(100000)],导致占用很大的内存,使用gc.collect()来回收,

总结

在Python中,主要通过引用计数进行垃圾回收;通过 “标记-清除” 解决容器对象可能产生的循环引用问题???;通过 “分代回收” 以空间换时间的方法提高垃圾回收效率???

相关文章

  • JavaScript的垃圾回收机制

    大纲 1、认识垃圾回收机制2、垃圾回收机制的原理3、垃圾回收机制的标记策略4、垃圾回收机制与内存管理 1、认识垃圾...

  • JS垃圾回收机制(内存问题)

    垃圾收集机制理解 垃圾收集机制:释放无用的数据,回收内存。 垃圾收集机制分类:1)自动回收 2)手动回收 垃圾收集...

  • python-垃圾回收机制

    这两天和朋友讨论问题,期间提到了垃圾回收机制,我立马想到了 python 的垃圾回收机制,之前有看过相关的资料,但...

  • python-垃圾回收机制

    前言 Python中,主要通过引用计数(Reference Counting)进行垃圾回收。 引用计数 在Pyth...

  • JVM垃圾回收机制

    JVM垃圾回收 整体思维导图 带着问题理解JVM垃圾回收机制 Java为什么需要垃圾回收机制; 回收哪部分垃圾; ...

  • 垃圾回收机制

    垃圾回收机制—GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就...

  • javascript的垃圾回收机制与内存管理

    一、垃圾回收机制—GCJavaScript具有自动垃圾回收机制(GC:Garbage Collecation),也...

  • Java垃圾回收详解

    深入理解 Java 垃圾回收机制 深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java 语言中一个...

  • 常见垃圾回收算法

    什么是垃圾回收(GC) 垃圾回收机制是一种找到内存中的垃圾将其释放并回收空间的机制 常见的垃圾回收算法 引用计数法...

  • 浅谈下垃圾回收机制(1)

    前言:垃圾回收机制在工作中很少碰到,看到阮一峰的书中有写,记录下。 垃圾回收机制与WeakSet(1)垃圾回收机制...

网友评论

      本文标题:python-垃圾回收机制

      本文链接:https://www.haomeiwen.com/subject/jtlevltx.html