大师兄的Python源码学习笔记(五十八): Python的内存管理机制(十三)
五、Python中的垃圾收集
5. gc模块
- Python中可以通过gc模块观察和手动调用gc机制的接口。
- 通过一个案例可以看出,对于引用计数机制能正常维护的对象,垃圾收集不起作用:
>>>import gc
>>>class A:
>>> ...
>>>class B:
>>> ...
>>>gc.set_debug(gc.DEBUG_STATS | gc.DEBUG_LEAK)
>>>while True:
>>> a=A()
>>> b=B()
>>> del a
>>> del b
>>> gc.collect()
>>> input()
gc: collecting generation 2...
gc: objects in each generation: 240 1283 4755
gc: objects in permanent generation: 0
gc: done, 0.0000s elapsed
- 当存在循环引用时,引用计数不起作用,而垃圾收集正常回收内存:
>>>demo.py
>>>import gc
>>>class A:
>>> ...
>>>class B:
>>> ...
>>>gc.set_debug(gc.DEBUG_STATS | gc.DEBUG_LEAK)
>>>while True:
>>> a=A()
>>> b=B()
>>> a.b = b
>>> b.a = a
>>> del a
>>> del b
>>> gc.collect()
>>> input()
gc: collecting generation 2...
gc: objects in each generation: 269 1002 4755
gc: objects in permanent generation: 0
gc: collectable <A 0x0000029EB2BB24C8>
gc: collectable <B 0x0000029EB2BB2788>
gc: collectable <dict 0x0000029EB2AFFAE8>
gc: collectable <dict 0x0000029EB2AFFEF8>
gc: done, 4 unreachable, 0 uncollectable, 0.0000s elapsed
网友评论