内存泄露

来源:互联网 发布:工作沟通软件 编辑:程序博客网 时间:2024/05/20 04:11
一、引用没释放造成的内存泄露
1.1、注册没取消造成的内存泄露
1.2、集合容器对象没清理造成的内存泄露
1.3、Context泄漏
所谓的Context泄漏,其实更多的是指Activity泄露,这是一个很隐晦的OutOfMemoryError的情况。
总结一下避免Context泄漏应该注意的问题: 
1.尽量使用Application这种Context类型。 
2.注意对Context的引用不要超过它本身的生命周期。 
3.慎重的对Context使用“static”关键字。 
4.Context里如果有线程,一定要在onDestroy()里及时停掉。 
1.4、static关键字的滥用
 当类的成员变量声明成static后,它是属于类的而不是属于对象的,如果我们将很大的资源对象(Bitmap,context等)声明成static,那么这些资源不会随着对象的回收而回收, 会一直存在,所以在使用static关键字定义成员变量的时候要慎重。
1.5、WebView对象没有销毁
当我们不要使用WebView对象时,应该调用它的destory()函数来销毁它,并释放其占用的内存,否则其占用的内存长期也不能被回收,从而造成内存泄露
1.6、GridView的滥用
GridView和ListView的实现方式不太一样。GridView的View不是即时创建的,而是全部保存在内存中的。比如一个GridView有100项,虽然我们只能看到10项,但是其实整个100项都是在内存中的
二、资源对象没关闭造成的内存泄露
三、一些不良代码成内存压力
3.1、Bitmap没调用recycle()
3.2、构造Adapter时,没有使用缓存的 convertView
3.3、ThreadLocal使用不当
如果我们粗暴的把ThreadLocal设置null,而不调用remove()方法或set(null),那么就可能造成ThreadLocal绑定的对象长期也不能被回收,因而产出内存泄露。
四、JNI代码的内存泄露
原创粉丝点击