这篇文章主要介绍了python垃圾回收机制的相关资料,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

什么是垃圾回收机制?

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

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

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

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

垃圾回收机制有什么用?

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

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

怎么进行垃圾回收

在我们Python当中采用的是引用计数机制为主,分代收集机制为辅的策略。

1、引用计数

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

引用计数的原理:

当一个对象的引用被创建或者复制时,对象的引用计数加1;

当一个对象的引用被销毁时,对象的引用计数减1;

当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。

引用计数有一个致命的弱点就是是循环引用(也称交叉应用)。

循环引用可以使一组对象的引用计数不为0,然而这些对象实际上并没有被任何外部对象所引用,它们之间只是相互引用。

这意味着不会再有人使用这组对象,应该回收这组对象所占用的内存空间,然后由于相互引用的存在,每一个对象的引用计数都不为0,因此这些对象所占用的内存永远不会被释放。

优点:

简单、直观

实时性,只要没有了引用就释放资源。

缺点:

维护引用计数需要消耗一定的资源

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

2、标记-清除

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

标记-清除原理:

“标记-清除”不改动真实的引用计数,而是将集合中对象的引用计数复制一份副本,改动该对象引用的副本。对于副

本做任何的改动,都不会影响到对象生命走期的维护。

3、分代回收

分代回收原理:

将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。

也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

原文来自:https://www.jb51.net/article/196603.htm

本文地址:https://www.linuxprobe.com/take-python-linux.html编辑:向金平,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/

python内存的回收机制_简单介绍python的垃圾回收机制相关推荐

  1. python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理

    Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, ...

  2. python程序框架的描述_简单介绍Python下自己编写web框架的一些要点

    在正式开始Web开发前,我们需要编写一个Web框架. 为什么不选择一个现成的Web框架而是自己从头开发呢?我们来考察一下现有的流行的Web框架: Django:一站式开发框架,但不利于定制化: web ...

  3. python队列来做什么_简单介绍python的双向队列

    介绍 大家都知道利用 .append 和 .pop 方法,我们可以把列表当作栈或者队列来用(比如,把 append 和 pop(0) 合起来用,就能模拟栈的"先进先出"的特点).但 ...

  4. python floor是什么意思_简单介绍Python中的floor()方法

    floor()方法返回不大于x的最大整数(向下取整). 语法 以下是floor()方法的语法: import math math.floor( x ) 注意:此函数是无法直接访问的,所以我们需要导入m ...

  5. python中len用法_简单介绍Python中的len()函数的使用

    简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...

  6. java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  7. 简述python中的几种数据类型,简单介绍Python中的几种数据类型

    简单介绍Python中的几种数据类型 python 里面分为 基本数据类型 和 复合数据类型 基本数据类型包括:数值 字符串 布尔 和 none 复合数据类型包括:列表 元组 字典 和集合怎么算是深情 ...

  8. python内存消耗大吗_如何减少python内存的消耗?

    标签: Python 打算删除大量涉及像C和C++语言那样的复杂内存管理.当对象离开范围,就会被自动垃圾收集器回收.然而,对于由Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情. ...

  9. jvm垃圾回收机制_深入理解JVM的垃圾回收机制

    ​如何判断对象已"死" Java堆中存放着几乎所有的对象实例,垃圾回收器在堆进行垃圾回收前,首先要判断这些对象那些还存活,那些已经"死去".判断对象是否已&qu ...

最新文章

  1. tm matlab,[转载]关于matlab中textread
  2. 微软发布多项Azure Kubernetes服务更新,增加GPU支持
  3. 小组结队项目-四则运算
  4. Node.js 笔记01
  5. 蒙娜丽莎,品牌创新的探索者
  6. 深入理解 JVM Class文件格式(十)
  7. Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)
  8. python一维数组定义,python一维数组保存
  9. 【Kafka】Confluent Schema Registry
  10. springboot - 问与答
  11. Atitit  404错误的排查流程总结 v3 qaf
  12. [工具]勒索病毒解密工具汇总
  13. mysql创建用户代码,MySQL创建用户与受权
  14. 关于红色警戒2不能在Win1064位系统上运行的问题的解决
  15. 网易严选应用的云原生演进实践
  16. Qt开发学生信息管理系统
  17. 结课作业:机械设计制造及其自动化文献综述
  18. C++ strcat 函数实现字符串拼接报错
  19. Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)
  20. PHP短视频聚合无水印在线解析源码

热门文章

  1. C#实现字符串按多个字符采用Split方法分割得到数组
  2. codis配置_分布式缓存Codis集群安装手册
  3. 外部网络如何获取网口打印机的ip地址_Win7如何连接网络打印机?详细的新手DIY教程...
  4. 一个列中多行求和_Excel 用选项求和及用快捷键快速求和,同时对多单元格求和...
  5. android 获取弹窗的值,从弹出窗口调用的Activity 返回一个值_popupwindow_开发99编程知识库...
  6. 关于显示当前日期并且自动生成后面的日期,月份也正常显示
  7. java包装类方法_Java包装类
  8. Android动态权限申请工具类非常好用包含9组危险权限
  9. Android中对话框的工具类
  10. android 多个handler,Android中的Handler与多线程应用实例