谈谈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中的迭代器漫谈
Feb 03 Python
python实现清屏的方法
Apr 30 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
pyshp创建shp点文件的方法
Dec 31 Python
详解python中@的用法
Mar 27 Python
python制作简单五子棋游戏
Jun 18 Python
kafka监控获取指定topic的消息总量示例
Dec 23 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
pytorch中的model=model.to(device)使用说明
May 24 Python
Python如何导出导入所有依赖包详解
Jun 08 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
php正则校验用户名介绍
2008/07/19 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
js数组的操作指南
2014/12/28 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
python读取Android permission文件
2013/11/01 Python
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
Python中异常重试的解决方案详解
2017/05/05 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
应届生财务管理求职信
2013/11/06 职场文书
工程总经理工作职责
2013/12/09 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
中专生自荐信
2014/06/25 职场文书
大学生找工作求职信
2014/07/09 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
物业管理交接协议书
2016/03/24 职场文书
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python