GC垃圾回收机制心得

Python GC垃圾回收机制主要使用引用计数-追踪和回收垃圾。在引用计数的基础上,通过标记-清除解决标记对象可能产生的循环问题,通过分代回收以空间换时间来提高回收效率
1引用计数 (PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数)
当对象被引用时,引用计数加1,当引用被删除,引用计数减1,当引用计数为0时,该对象生命结束
优点:简单、实时
缺点:维护引用计数消耗资源、循环引用

2标记、清除
按需分配,等到没有空闲内存时从寄存器和程序栈上的引用出发,遍历以对象为节点,以应用为边构成的图,把所有可以访问到的对象打上标记,清扫一遍
内存,把没有标记的删除

3、分代回收
将系统的内存块按存活的时间划分集合,每一个集合他就是一代,垃圾回收频率随着代的存活时间增大而减小
存活时间经常根据经过几次垃圾回收来衡量
python 默认定义了三代对象集合,索引越大,存活时间越长。
比如某个内存块经行了3次回收还存活这,就将他放到集合A中,把新分配的内存都划分到集合B中,那么下次回收时大多数情况只会对
集合B进行回收,对集合A回收就需要很长一段时间,这就使得垃圾回收的内存少了。。自然就提高了效率。在整个过程中
集合B中存活时间长的就转移到A中去,当然A中也会存在一些垃圾 ,这些垃圾会因为分代被延迟

你可能感兴趣的:(GC垃圾回收机制心得)