一、内存回收机制

内存回收机制是Python 解释器自带的回收机制(简称GC);

作用:在程序运行过程中会申请大量的内存空间地址,对于无用的内存空间地址如果不及时清理掉会导致内存溢出,导致程序崩溃,内存管理是一件重要且负责的事情,Python解释器自带的内存空间回收机制把程序员从繁杂的内存管理中解放出来。

二、回收机制原理分析

1、Python的GC模块是通过内存地址被关联引用的次数来分析回收内存,如果被引用的次数为零时则回收内存。

这种方式称为:“引用计数”(reference counting)

 

2、循环引用在堆区(容器)中产生的对象间接引用,这种交叉引用就算没关联到栈区内存地址上,引用的计数也不会为0,所以不会被引用计数清除回收,这样就可能产生内存溢出问题。所以在引用计数的基础上遍历所有 GC Root(栈区)为起点的引用链,可达的标记存活的对象可以保留,不可达的标记为非存活的对象就可以清除。

这种方式称为: “标记-清除”(mark and sweep)

 

 

3、基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,变量名越多扫描时间就会很长,这样就会消耗大量时间。为了提高回收内存的效率,解释器的GC模块会根据变量的存活时间来划分扫描等级,扫描到引用这个变量次数多,就降低这个变量的扫描频率,延迟回收继续保留到内存空间,提高了新增变量的扫描效率,扫描到引用次数为零的则回收掉该变量的内存地址。

这种方式称为 “分代回收” (generation collection)