关于“垃圾回收机制”:
"""
垃圾回收机制: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()