python3自帶垃圾回收機制,通常靠引用計數器可回收大部分垃圾,但是強引用的循環引用的垃圾沒法回收。自動的GC分三代回收,但有時候在循環引用的情況下需要立即回收,可手動使用。弱引用的循環引用可有效的避免內存泄漏
示例代碼如下
import gc
import objgraph
import weakref
class Person:
pass
class Dog:
pass
p = Person()
d = Dog()
p.pet =d
d.master = p #循環引用,無法釋放垃圾
#d.master = weakref.ref(p) #單個對象弱引用
# weakref.WeakKeyDictionary({"dog":d1,"cat":c1}) #字典對象弱引用
del p
del d
gc.collect() #手動回收垃圾,無論垃圾回收機制是否開啓
print(objgraph.count("Person"))
print(objgraph.count("Dog"))