当引计数为0时,该对象⽣命就结束了。

计数机制的优点:

1、简单

2、实时性:旦没有引,内存就直接释放了。不像其他机制等到特定时机。实时性还带来个好处:处理回收内存的时间分摊到了平时。

计数机制的缺点:

1、维护引计数

2、消耗资源循环引

list1    =   []

list2    =   []

list1.append(list2)

list2.append(list1)

list1list2相互引⽤,如果不存在其他对象对他们的引用list1list2的引用计数也仍然1,所占⽤的内存永远无法被回收这将是致命的。 对于如今的强⼤硬件,缺点1尚可接受,但是循环引导致内存泄露,注定python还将引⼊新的回收机制。(分代收集)

.垃圾回收机制

Python中的垃圾回收是以引用计数为主,分代收集为辅。

1、导致引用计数+1的情况

对象被创建,例如a=23

对象被引⽤,例如b=a

对象被作为参数,传个函数中,例如func(a)

对象作为⼀个元素,存储在容器中,例如list1=[a,a]

2、导致引用计数-1的情况

对象的别名被显式销毁,例如del    a

对象的别名被赋予新的对象,例如a=24

个对象离开它的作域,例如f函数执⾏完毕时,func函数中的局部变量(全局变量不会)

对象所在的容器被销毁,或从容器中删除对象

3、查看一个对象的引用计数

importsys

a    = "hello    world"

sys.getrefcount(a)

可以查看a对象的引用计数,但是⽐正常计数1,因为调函数的时候传入a,这会让a的引用计数+1

4.有三种情况会触发垃圾回收:

  1. gc模块的计数器达到阀值的时候,自动回收垃圾
  2. gc.collect(),手动回收垃圾
  3. 程序退出的时候,python解释器来回收垃圾

垃圾回收:引用计数与分代收集机制相关推荐

  1. JAVA分代收集机制详解

    Java堆中是JVM管理的最大一块内存空间.主要存放对象实例. 在JAVA中堆被分为两块区域:新生代(young).老年代(old). 堆大小=新生代+老年代:(新生代占堆空间的1/3.老年代占堆空间 ...

  2. python的super super easy教程 | 垃圾回收 引用计数 深拷贝和浅拷贝

    input最好是放在函数外面range(i)表示从0到(i-1)函数的作用:接收一个参数 返回一个参数python的内存管理 (常见的面试题)python的内存机制:以引用计数为主,分代回收,标记清除 ...

  3. heap c语言数组实现,垃圾回收算法实现之 - 分代回收(完整可运行C语言代码)...

    分代垃圾回收(Mark-Sweep GC),并不是一个具体的算法,只是结合了几种垃圾回收算法,把对象按特点进行了分类,对每种特点的对象集执行不同的回收算法,从而提升回收效率 阅读本文之前,你最好已经了 ...

  4. 垃圾回收-- 引用计数法

    引用计数法 引用计数法,最重要的就是计数器,记录有多少引用该对象 引用计数法与mutator 的执行密切相关,在mutator 的处理过程中通过增减计数器的值来进行内存管理, 在分配和更新对象时会发生 ...

  5. 七种垃圾收集器和垃圾回收、分代收集、GCROOTS相关概念、GC如何判断一个对象可以被回收

    文章目录 垃圾收集器概述 垃圾回收算法 1)标记-清除算法(Mark-Sweep)(DVM 使用的算法) 2)复制算法(Copying) 3)标记-整理算法(Mark-Compact) 4)分代收集( ...

  6. 2、垃圾回收算法(标记清除算法、复制算法、标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)

    2.垃圾回收概述 2.1.垃圾回收算法 2.1.1.垃圾回收算法-标记清除算法 2.1.2.垃圾回收算法–复制算法 2.1.3.垃圾回收算法–标记整理算法和分代收集算法 2.1.4.垃圾回收算法–Se ...

  7. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

    文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...

  8. 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )

    文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...

  9. 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优

    67.Java垃圾收集机制 67.1.对象引用 67.2.垃圾对象的判定 67.3.垃圾收集算法 67.3.1.标记-清除算法 67.3.2.标记-整理算法 67.3.3.分代收集 67.4.垃圾收集 ...

最新文章

  1. Go 知识点(03)— 非缓冲 channel 的长度始终为 0
  2. 笔记本上的小键盘计算机怎样用,笔记本小键盘怎么开,详细教您笔记本小键盘怎么开启...
  3. CentOS 6.5 64位 安装Nginx, MySQL, PHP
  4. i_rdev i_bdev i_mapping 关系
  5. MySQL中any、some、all关键字
  6. 常用公差配合表图_涨知识!常用的机械测量工具,你都知道吗?
  7. 【Qt】QModbusRtuSerialMaster类
  8. 深圳不完全启示录之初来乍到----1
  9. 从谷歌浏览器复制不带样式_文字特效游戏海报特效字体photoshop字体图层样式
  10. Linux 命令(26)—— rename 命令
  11. JDBC01 mysql和navicat的安装
  12. 基于jQuery的视频和音频播放器jPlayer
  13. sqlserver 当月、 时间_SQLServer取系统当前时间
  14. java发送网络图片邮件
  15. mysql数据库 添加字段,修改字段,修改注释
  16. java8新特性 函数式编程 Lamda
  17. c++设计某小型公司的 employee(人员)类
  18. 博客项目实现文章评论功能
  19. CentOS-scp系统间文件传输
  20. 移动端百度强引蜘蛛SEO工具

热门文章

  1. flask 必知必会
  2. 自学python前戏
  3. echarts自学笔记
  4. Android中土司(Toast)的使用
  5. mysql中ibatis的limit动态传参
  6. 控制台中使用cstring和string
  7. 2009岁末之复用系统框架(B/S)
  8. UDT源码剖析(四):UDT的GC线程相关过程代码注释
  9. 在STM32单片机上跑神经网络算法
  10. C++ —— C++类