垃圾回收机制例子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垃圾回收机制例子相关的知识,希望对你有一定的参考价值。
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是否开启;
‘‘‘
以上是关于垃圾回收机制例子的主要内容,如果未能解决你的问题,请参考以下文章