内存泄漏
由于疏忽,或者错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。导致程序运行速度减慢,甚至系统崩溃等严重后果。有__del__()函数的对象间的循环引用是导致内存泄漏的主凶。不使用一个对象时,使用:del object 来删除一个对象的引用计数就可以有效防止内存泄漏问题。
通过Python扩展模块gc来查看不能回收的对象的详细信息。
可以通过sys.getrefcount(obj)来获取对象的引用计数,并根据返回值是否为0来判断是否内存泄漏。
Python默认内存处理机制为GC(垃圾回收)
class People(object):
def __init__(self):
self.bird = None
print 'people init'
def __del__(self):
print 'people del'
class Bird(object):
def __init__(self):
self.p = None
print 'Bird init'
def __del__(self):
print 'Bird del'
for i in range(0,10000):
p1 = People()
d1 = Bird()
p1.bird = d1
d1.p = p1