我的操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
步骤
(1)收集所有容器对象 ( list , dict , tuple , customClass, ... ) ,通过一个双向链表进行引用;
(2)针对每一个容器对象,通过一个变量 gc_refs 来记录当前对应的引用计数;
(3)对于每个容器对象,找到它所引用的容器对象,并将这个容器对象的引用计数 -1;
(4)经过步骤 3 后,如果一个容器对象的引用计数为 0,就代表这个对象可以被回收了,肯定是 "循环引用" 才导致它活到现在的。
垃圾回收的周期顺序
0 代 "垃圾回收" 一定次数后,触发 0~1 代回收;
1 代 "垃圾回收" 一定次数后,触发 0~2 代回收。