Python垃圾回收
2017-09-20 14:19
190 查看
小整数对象池
范围[-5,256]作用:凡是在该范围的数都是同一个对象,超出该范围的为创建的新对象
单个字符池
与小整数对象池一样,只有一个对象intern机制
对于没有空格的字符串(两个字符以上),对象只会创建一次,创建完毕相当于放进字符串常量池,当要使用是会重该池拿对象出来使用GC垃圾回收器
garbage collectionPython的对象分配
即创即向系统申请内存垃圾回收机制
引用计数机制
每有一个引用指向对象时,对象的内部”引用计数器”加1,每当销毁一个引用时(del(a)),”引用计数器”减1,当其为0时,垃圾回收器立即回收内存(实时性)零代(Generation Zero)
Python使用一种不同的链表来持续追踪活跃的对象Python中的GC阈值
因为循环引用的原因,并且因为你的程序使用了一些比其他对象存在时间更长的对象,从而被分配对象的计数值与被释放对象的计数值之间的差异在逐渐增长。一旦这个差异累计超过某个阈值,则Python的收集机制就启动了,并且触发上边所说到的零代算法,释放“浮动的垃圾”,并且将剩下的对象移动到一代列表一代
类似于0代二代
类似于0代处理分配
Python会相对更频繁处理0代,因为0代存储着新建的对象,往往这些新对象的生命周期相对于老对象更短(弱代假说(weak generational hypothesis)),老对象的存在拥有着一定的理由,我们不排除某些新对象有着重要的理由会在将来存在更久的时间,但是,这只是占小部分.所以在第一道屏障里花大工夫,来将垃圾尽量在0代理处理掉.
gc实用模块
导致引用计数器+1情况
引用指向作为函数参数
放进容器(如:list)
导致引用计数器-1情况
引用不在指向对象对象离开其作用域(如执行完某一函数体)
从容器中删除对象,容器被销毁
查看对象的引用计数
import sys sys.getrefcount(a)
关闭垃圾回收器
没人这么干,但是确实能这么干import gc gc.disable()
触发垃圾回收
调用gc.collect ()当gc模块计数器达到阀值的时候
程序退出的时候
常用函数
gc.set_debug
设置debug模式,打印debug信息,通常设置gc.DEBUG_LEAK模式gc.collect
垃圾回收检查gc.collect(0),即检查0代对象的垃圾
gc.collect(1),即检查0、1代对象的垃圾
gc.collect(2),即检查0、1、2代对象的垃圾
如果不传参数,执行一个full collection,也就是等于传2
gc.set_threshold
设置阀值gc.get_count
获取计数器此处将初代作为0代,初代的后一代为1代,1代的后一代为2代
(1,2,3)
1代表距离上一次0代垃圾检查,”新建内存数-释放内存数”
2代表距离上一次1
a40b
代垃圾检查,0代的检查垃圾检查次数
3代表距离上一次2代垃圾检查,1代的检查垃圾检查次数
上面的三个函数有什么联系?
阀值,是指计数器的阀值,当阀值达到上限的时候会触发垃圾回收检查,再去重置计数器.当计数器从(699,3,0)增加到(700,3,0),gc模块就会执行gc.collect(0),即检查0代对象的垃圾,并重置计数器为(0,4,0) 当计数器从(699,9,0)增加到(700,9,0),gc模块就会执行gc.collect(1),即检查0、1代对象的垃圾,并重置计数器为(0,0,1) 当计数器从(699,9,9)增加到(700,9,9),gc模块就会执行gc.collect(2),即检查0、1、2代对象的垃圾,并重置计数器为(0,0,0) collect后代每检查一次计数器都会重置上一代计数器的数值 如(50,1,2), 若collect(0),检查0代的垃圾对象,此时为(X,2,2) 若collect(1),检查0,1代的垃圾对象,此时为(X,0,3) 若collect(2),检查0,1,2代的垃圾对象,此时(X,0,0)
相关文章推荐
- Python垃圾回收机制
- Python 构造函数、 Python 析构函数、Python 垃圾回收机制
- python垃圾回收
- 深入分析 Python 的垃圾回收机制
- Python垃圾回收机制详解
- Python的垃圾回收机制(一)之简介
- Python垃圾回收机制
- python 垃圾回收机制
- Python垃圾回收机制
- python和ruby的垃圾回收机制
- python的垃圾回收机制
- Python的垃圾回收机制深入分析--循环引用
- Python之美[从菜鸟到高手]--Python垃圾回收机制及gc模块详解
- python引用计数和gc垃圾回收
- 深入分析 Python 的垃圾回收机制
- [Python]垃圾回收机制
- Python 垃圾回收机制详解
- Python的垃圾回收机制(二)之内存模型
- Python中的垃圾回收和引用环的处理
- python基础 之 对象销毁(垃圾回收)