垃圾回收:引用计数与分代收集机制
当引⽤计数为0时,该对象⽣命就结束了。
引⽤计数机制的优点:
1、简单
2、实时性:⼀旦没有引⽤,内存就直接释放了。不⽤像其他机制等到特定时机。实时性还带来⼀个好处:处理回收内存的时间分摊到了平时。
引⽤计数机制的缺点:
1、维护引⽤计数
2、消耗资源循环引⽤
list1 = []
list2 = []
list1.append(list2)
list2.append(list1)
list1与list2相互引⽤,如果不存在其他对象对他们的引用,list1与list2的引用计数也仍然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.有三种情况会触发垃圾回收:
- 当gc模块的计数器达到阀值的时候,自动回收垃圾
- 调⽤gc.collect(),手动回收垃圾
- 程序退出的时候,python解释器来回收垃圾
垃圾回收:引用计数与分代收集机制相关推荐
- JAVA分代收集机制详解
Java堆中是JVM管理的最大一块内存空间.主要存放对象实例. 在JAVA中堆被分为两块区域:新生代(young).老年代(old). 堆大小=新生代+老年代:(新生代占堆空间的1/3.老年代占堆空间 ...
- python的super super easy教程 | 垃圾回收 引用计数 深拷贝和浅拷贝
input最好是放在函数外面range(i)表示从0到(i-1)函数的作用:接收一个参数 返回一个参数python的内存管理 (常见的面试题)python的内存机制:以引用计数为主,分代回收,标记清除 ...
- heap c语言数组实现,垃圾回收算法实现之 - 分代回收(完整可运行C语言代码)...
分代垃圾回收(Mark-Sweep GC),并不是一个具体的算法,只是结合了几种垃圾回收算法,把对象按特点进行了分类,对每种特点的对象集执行不同的回收算法,从而提升回收效率 阅读本文之前,你最好已经了 ...
- 垃圾回收-- 引用计数法
引用计数法 引用计数法,最重要的就是计数器,记录有多少引用该对象 引用计数法与mutator 的执行密切相关,在mutator 的处理过程中通过增减计数器的值来进行内存管理, 在分配和更新对象时会发生 ...
- 七种垃圾收集器和垃圾回收、分代收集、GCROOTS相关概念、GC如何判断一个对象可以被回收
文章目录 垃圾收集器概述 垃圾回收算法 1)标记-清除算法(Mark-Sweep)(DVM 使用的算法) 2)复制算法(Copying) 3)标记-整理算法(Mark-Compact) 4)分代收集( ...
- 2、垃圾回收算法(标记清除算法、复制算法、标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)
2.垃圾回收概述 2.1.垃圾回收算法 2.1.1.垃圾回收算法-标记清除算法 2.1.2.垃圾回收算法–复制算法 2.1.3.垃圾回收算法–标记整理算法和分代收集算法 2.1.4.垃圾回收算法–Se ...
- 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )
文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...
- 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优
67.Java垃圾收集机制 67.1.对象引用 67.2.垃圾对象的判定 67.3.垃圾收集算法 67.3.1.标记-清除算法 67.3.2.标记-整理算法 67.3.3.分代收集 67.4.垃圾收集 ...
最新文章
- Go 知识点(03)— 非缓冲 channel 的长度始终为 0
- 笔记本上的小键盘计算机怎样用,笔记本小键盘怎么开,详细教您笔记本小键盘怎么开启...
- CentOS 6.5 64位 安装Nginx, MySQL, PHP
- i_rdev i_bdev i_mapping 关系
- MySQL中any、some、all关键字
- 常用公差配合表图_涨知识!常用的机械测量工具,你都知道吗?
- 【Qt】QModbusRtuSerialMaster类
- 深圳不完全启示录之初来乍到----1
- 从谷歌浏览器复制不带样式_文字特效游戏海报特效字体photoshop字体图层样式
- Linux 命令(26)—— rename 命令
- JDBC01 mysql和navicat的安装
- 基于jQuery的视频和音频播放器jPlayer
- sqlserver 当月、 时间_SQLServer取系统当前时间
- java发送网络图片邮件
- mysql数据库 添加字段,修改字段,修改注释
- java8新特性 函数式编程 Lamda
- c++设计某小型公司的 employee(人员)类
- 博客项目实现文章评论功能
- CentOS-scp系统间文件传输
- 移动端百度强引蜘蛛SEO工具