刘刚刚的个人博客

python-垃圾回收机制(GC)


c中垃圾需要手动去回收,那么python中是如何去自动回收垃圾的呢?

在内存中,变量的值存放在堆区,变量的名称存放在栈区。GC管理的是堆区

引用计数

  • 直接引用

    将值直接赋值给变量

  • 间接引用

    将值赋值给类似列表的变量

​ 以上两种情况,值没被引用一次,则会增加一个引用计数,每减少一次则一个引用计数,当值的引用计数为0的时候,则GC会自动回收值的空间。

标记清除

​ 在循环引用时,比如:两个列表相互引用。在 del 掉两个列表的变量时,两个列表的值因为存在相互引用,所以值的引用计数不为0.此时,不能通过引用计数的方式回收产生的垃圾。

​ 在内存不够用的时候,GC会扫描栈区和堆区,查找堆区中没有被栈区变量引用到的值(即没有被变量直接引用或者间接引用到的值),然后删除。

分代回收

​ 为了提高标记计数的效率,GC在扫描时,如果多次都没有回收的变量,则认为改变量为常用变量,随着该变量的存活时间越长,GC对其扫描频率越低。

在GC回收过程中,主要是靠标记清楚机制进行垃圾回收,标记清除是对引用计数的补充,分代回收是对引用计数的优化。
我的名片

昵称:shuta

职业:后台开发(php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号