内存泄漏
作者:互联网
可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用。那么对于这种情况下,由于代码的实现不同就会出现很多种内存泄漏问题
主要原因:内核以为此对象还在引用中,无法回收,造成内存泄漏
只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏。
内存泄漏和内存溢出的关系:内存泄漏的增多,最终会导致内存溢出。
内存泄漏类别
- 经常发生:发生内存泄露的代码会被多次执行,每次执行,泄露一块内存;
- 偶然发生:在某些特定情况下才会发生;
- 一次性:发生内存泄露的方法只会执行一次;
- 隐式泄漏:一直占着内存不释放,直到执行结束;严格的说这个不算内存泄漏,因为最终释放掉了,但是如果执行时间特别长,也可能会导致内存耗尽;
python内存泄漏:
- 使用全局的 list、 dict 或其它容器,不停的往这些容器中插入对象,而忘记了在使用完之后进行删除回收
- 引用循环”,并且被循环引用的对象定义了__del__方法,就会发生内存泄露。
mysql-python的连接
mysql-python会设定use_unicode=True。结果是mysql-python会利用python自己的 codec模块去做字符解码工作,但实际中发现mysql库gbk编码字符集比python的gbk编码集大。一些在mysql里可以存储的字符,拿 python的codec去解析就会抛错。更严重的问题是,在mysql-python1.2.3之前,use_unicode=True即让 mysql-python解码这块存在内存泄露的bug。解码出来所有数据库字符串经过mysql-python出来都是unicode object,要输出到文件需要再次编码。
标签:泄漏,python,对象,内存,mysql,泄露 来源: https://www.cnblogs.com/iven98/p/16144199.html