首页 / 知识
python垃圾回收机制是什么
2023-11-12 12:59:00
不同于C/C++,像Python这样的语言是不需要程序员写代码来管理内存的,它的GC(GarbageCollection)机制实现了自动内存管理。GC做的事情就是解放程序员的双手,找出内存中不用的资源并释放这块内存。下面我们来看看Python的GC是怎么做的:
python自带的解释器CPython主要使用了三种垃圾回收机制(引用计数为主,标记-清除和分代回收为辅):
引用计数
标记清除
分代回收
下面让我们分别了解下这几种机制:
引用计数
引用计数法ReferenceCounting的原理是,每个对象都维护一个引用计数字段,记录这个对象被引用的次数(如果不清楚变量->引用->对象的问题,可以查看这篇文章Python的深拷贝和浅拷贝),如果有新的引用指向对象,对象引用计数就加一,引用被销毁时,对象引用计数减一,当用户的引用计数为0时,该内存被释放。可以通过sys.getrefcount()函数查看对象被引用的个数。
这种方法主要存在两种问题:
需要去维护引用计数,存在执行效率问题
无法解决循环引用问题
所谓循环引用就是:有一组对象的引用计数不为0,但是这组对象实际上并没有被变量引用,它们之间是相互引用,而且也不会有其他的变量再去引用这组对象,最终导致如果使用引用计数法这些对象占用的内存永远不会被释放。
写一段代码举个例子:
In[23]:a=[]
In[24]:b=[]
In[25]:a.append(b)
In[26]:b.append(a)
In[27]:a
Out[27]:[[[...]]]
In[28]:b
Out[28]:[[[...]]]
可以看到,现在ab都出现了循环引用,此时就算使用del语句删除变量,被使用的内存也不会被回收,所以就需要第二种GC机制:
标记清除
标记清除Mark-Sweep是针对循环引用问题的回收机制,作用的对象是容器类型的对象(比如:list、set、dict等)。
原理是:通过根节点对象(不会被删除的对象)对有向图把所有活动对象打上标记,然后回收没有被标记的非活动对象。
分代回收
分代回收是建立在标记清除基础上的一种辅助回收容器对象的GC机制。无论开发的程序类型如何,规模如何,都有这样的相同之处:一些比例的内存生存周期都很短,而另一些内存的生存周期比较长,可能会伴随着整个程序的开始和结束。所以分代回收就根据系统中内存存活时间把它们划分成不同的集合:一共分成三个集合,每个集合称为一个代。它们的垃圾收集频率随对象存活存活时间的增大而减小。也就是说:对于存活时间越长的对象,就越不可能是垃圾,减少对其的收集频率。而新创建的对象都在第一代,第一代集合总数达到上限后,会触发GC机制:可以回收的对象所占的内存被释放,不能被回收的移到中年代。
以上内容为大家介绍了Python培训之垃圾回收机制是什么,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
python如何确定是否为可迭代对象
python如何确定是否为可迭代对象,培训,元素,索引,对象,整数,字典,函数,类型,下标,模块,迭代可以理解为,任意的集合使用for循环遍历python中,迭python代码如何在命令行运行
python代码如何在命令行运行,代码,培训,路径,空格,文件,下面,以上,目录,更多,内容,我们在编写python代码时,可以在交互模式下运行代码,也可以用python怎么写多行代码
python怎么写多行代码,代码,培训,情况,示例,字符串,斜杠,方法,行书,括号,有用,在写代码过程中,经常遇到一行代码很长的情况。为了让代码显得整python怎么判断某一对象是否为字典
python怎么判断某一对象是否为字典,培训,名称,代码,情况,类型,实例,元素,字典,函数,对象,我们经常需要在Python代码中确定某个实例是什么类型python如何查看对象属性
python如何查看对象属性,培训,网络,系统,函数,对象,属性,变量,示例,实例,模块,在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要python字符串是对象吗
python字符串是对象吗,培训,名称,设计,对象,函数,变量,实体,参数,物件,字符串,python中一切都是对象在python中下列语句其实都是一个共同点:i=python如何判断对象是否有某个属性
python如何判断对象是否有某个属性,培训,名称,异常,对象,属性,特性,参数,方法,函数,定义,python如何判断某一对象是否有某一属性,可以使用hasapython怎么给代码注释
python怎么给代码注释,代码,培训,注释,时间,项目,负担,冗余,重要性,开头,含义,注释的重要性如果我们是做独立项目,或者是唯一一位来查看自己编python新手如何系统学习
python新手如何系统学习,基础,系统,状态,环境,中级,培训,阶段,代码,概念,管理,我们可把学习python分为4个阶段,每个阶段需要完善的掌握知识点,ppython详解Python垃圾回收机制
python详解Python垃圾回收机制,技术,时间,培训,对象,系统,名字,垃圾,标记,机制,内存,引用计数python默认的垃圾收集机制是“引用计数”,每个对python详解python包管理器pip安装
python详解python包管理器pip安装,培训,管理,工具,方法,详解,源码,可能会,脚本,模块,以上,pip对于使用python的朋友并不陌生,当你想安装pythonpython如何释放内存
python如何释放内存,培训,情况,名称,对象,赋值,内存,别名,变量,语句,函数,关于Python中的内存释放问题首先就不得不提到Python解释器在何种情