内存泄漏


可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用。那么对于这种情况下,由于代码的实现不同就会出现很多种内存泄漏问题
主要原因:内核以为此对象还在引用中,无法回收,造成内存泄漏
只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏。
内存泄漏和内存溢出的关系:内存泄漏的增多,最终会导致内存溢出。
内存泄漏类别

  • 经常发生:发生内存泄露的代码会被多次执行,每次执行,泄露一块内存;
  • 偶然发生:在某些特定情况下才会发生;
  • 一次性:发生内存泄露的方法只会执行一次;
  • 隐式泄漏:一直占着内存不释放,直到执行结束;严格的说这个不算内存泄漏,因为最终释放掉了,但是如果执行时间特别长,也可能会导致内存耗尽;
    python内存泄漏:
  1. 使用全局的 list、 dict 或其它容器,不停的往这些容器中插入对象,而忘记了在使用完之后进行删除回收
  2. 引用循环”,并且被循环引用的对象定义了__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,要输出到文件需要再次编码。

原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/245040.html

(0)
上一篇 2022年4月18日
下一篇 2022年4月18日

相关推荐

发表回复

登录后才能评论