关于“垃圾回收机制”:
""" 垃圾回收机制:GC机制 Python: 1.引用计数机制为主 * 如何获取一个对象的引用计数? sys.getrefcount(a) 刚创建对象引用计数为2 a.增加引用计数操作 1、如果有新的对象对象使用该对象,+1 2、装进列表+1 3、作为函数参数 b.减少引用计数操作 1.如果有新的对象对象使用该对象,新对象不在使用-1 2.从列表中移除-1 3.函数调用结束 4.del 显示销毁 2.隔代回收为辅助 循环引用 """ import sys class AA(): # 创建对象开辟内存时调用 def __new__(cls,*args,**kwargs): print("开辟内存空间") return super(AA, cls).__new__(cls) # 初始化方法 def __init__(self): print("创建对象at:%s"%hex(id(self))) # 对象被系统回收之前,会调用该方法 def __del__(self): print("%s say bye bye"%hex(id(self))) def test(aaa): print(aaa) print("a的引用计数为%d"%sys.getrefcount(a)) a = AA() print('a的引用计数为:%d'%sys.getrefcount(a)) b = a print('a的引用计数为:%d'%sys.getrefcount(a)) list = [a] print('a的引用计数为:%d'%sys.getrefcount(a)) test(a) print('a的引用计数为:%d'%sys.getrefcount(a)) print("-------------------------------------") b=100 print('a的引用计数为:%d'%sys.getrefcount(a)) list.remove(a) print('a的引用计数为:%d'%sys.getrefcount(a)) del a print("--------------程序结束-----------------")""" 垃圾回收机制: 1.引用计数机制 相互引用,引用计数无法删除类似的对象 2.隔代回收机制* 原理: 随着时间的推进,程序冗余对象逐渐增多,达到一定数量(阈yù值),系统进行回收 (0代,1代,2代) 代码: import gc gc.get_count() gc.get_threshold() ->(700,10,10) gc.disable() """ import gc,time class AA(): def __new__(cls, *args, **kwargs): print("new") return super(AA,cls).__new__(cls) def __init__(self): print("object born at %s"%hex(id(self))) def __del__(self): print("%s 被系统回收"%hex(id(self))) def start(): while True: a = AA() b = AA() a.v = b b.v = a del a del b print(gc.get_threshold()) print(gc.get_count()) time.sleep(0.1) gc.set_threshold(200,10,10) start()