垃圾回收机制例子

import gc
class ClassA():
    def __init__(self):
        print('object born ,id:%s'%str(hex(id(self))))

def f2():
    while True:
        c1 = ClassA()
        c2 = ClassA()
        c1.t = c2 #给c1创建个属性c1.t 这个属性指向c2
        c2.t = c1 #给c2创建个属性c2.t 这个属性指向c1
        del c1
        del c2

gc.disable() #关闭垃圾回收,机禁止内存回收
f2()

#这样运行的脚本内存没有得到回收,我们用的又是while循环,这样会不断的增加内存,直到把机器跑死
'''
解释一下这个脚本的运行机制:
1.首先创建一个类,这个不重要,什么都行
2.然后是创建两个对象c1和c2,分别指向了类ClassA,这就占用了两个内存
3.分别给这两个对象添加了个属性指向对方,这样的话指向内存的指针就不再只有c1和c2了,
4.删除c1,c2指向类ClassA内存的指针,
5.但是指向在c1,c2,内存内指向对方的属性t的指针还在,所以他们的内存不会被释放
6.while循环的时间长了,就有大量的内存没有得到释放而卡死.
'''
'''
gc module
gc.enable(),开启gc(默认情况下是开启的);
gc.disable(),关闭gc;
gc.isenabled(),判断gc是否开启;
'''

猜你喜欢

转载自blog.51cto.com/853056088/2159742