谈谈python垃圾回收机制


Posted in Python onSeptember 27, 2020

什么是垃圾回收机制?

首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来。

在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾。那当你有了女朋友了就不一样了,她会帮你收拾房间,把没用的垃圾都给你扔掉。

那在我们Python当中的垃圾回收承担的就是女朋友的角色,你们想象一下,你现在有一个轻度强迫症的女朋友一刻不停的跟在你的背后打扫卫生,你一放下脏碟子或者垃圾什么的,就已经帮你清理、打扫了

所以垃圾回收机制就是自动帮助我们管理内存,清理垃圾的一种工具

垃圾回收机制有什么用?

那我们现在先来想一想,我们平时在写程序的时候是不是会定义一些变量名,那这些变量名都是存在哪些地方呢?是不是都是存在内存里面,那当我们一直不停的定义变量是不是就会使我们内存空间的占有率增加,那我们的垃圾回收机制就会将一些没用的名字,没用的垃圾自动的回收起来。

识别垃圾对象,从垃圾对象那里回收内存

怎么进行垃圾回收
在我们Python当中采用的是引用计数机制为主,分代收集机制为辅的策略。

1、引用计数

在Python中,大多数对象的生命周期都是通过对象的引用计数来管理的。从广义上来讲,引用计数也是一种垃圾收集机制,而且也是一种最直观,最简单的垃圾收集技术。

引用计数的原理:

当一个对象的引用被创建或者复制时,对象的引用计数加1;
当一个对象的引用被销毁时,对象的引用计数减1;
当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。
引用计数有一个致命的弱点就是是循环引用(也称交叉应用)。

循环引用可以使一组对象的引用计数不为0,然而这些对象实际上并没有被任何外部对象所引用,它们之间只是相互引用。
这意味着不会再有人使用这组对象,应该回收这组对象所占用的内存空间,然后由于相互引用的存在,
每一个对象的引用计数都不为0,因此这些对象所占用的内存永远不会被释放。

优点:

简单、直观
实时性,只要没有了引用就释放资源。

缺点:

维护引用计数需要消耗一定的资源
循环应用时,无法回收。也正是因为这个原因,才需要通过标记-清理和分代收集机制来辅助引用计数机制。

2、标记-清除

“标记-清除”是为了解决循环引用的问题。可以包含其他对象引用的容器对象(比如:list,set,dict,class,instance)都可能产生循环引用。

标记-清除原理:

“标记-清除”不改动真实的引用计数,而是将
集合中对象的引用计数复制一份副本,改动该对象引用的副本。对于副
本做任何的改动,都不会影响到对象生命走起的维护。

3、分代回收

分代回收原理:

将系统中的所有内存块根据其存活时间划分为不同的集合,
每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。
也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

以上就是谈谈python垃圾回收机制的详细内容,更多关于python垃圾回收机制的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
简单解析Django框架中的表单验证
Jul 17 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
利用Django-environ如何区分不同环境
Aug 26 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
python join方法使用详解
Jul 30 Python
python多线程同步之文件读写控制
Feb 25 Python
Python安装tar.gz格式文件方法详解
Jan 19 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
如何在python中处理配置文件代码实例
Sep 27 #Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 #Python
python 读取、写入txt文件的示例
Sep 27 #Python
python 动态绘制爱心的示例
Sep 27 #Python
python批量修改文件名的示例
Sep 27 #Python
python 绘制国旗的示例
Sep 27 #Python
python把一个字符串切开的实例方法
Sep 27 #Python
You might like
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
Javascript 对象的解释
2008/11/24 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python如何获取系统iops示例代码
2016/09/06 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
python实现两个文件夹的同步
2019/08/29 Python
python 命名规范知识点汇总
2020/02/14 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
渡河少年教学反思
2014/02/12 职场文书
军训自我鉴定范文
2014/02/13 职场文书
年终总结会主持词
2014/03/25 职场文书
村官个人总结范文
2015/03/03 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
Python类方法总结讲解
2021/07/26 Python
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android