您的位置:首页 > 其它

什么情况下会导致内存泄露

2016-10-12 17:02 281 查看
Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M,有的可能是24M,当我们的内存占用超过了一定的程度后,就会出现OutOfMemory的错误。

下面说明几点可能导致内存泄露的原因,供大家参考。

1.对象内存过大

保存了多个好用内存过大的对象,造成内存超出限制。

2.资源释放

程序代码的问题,长期保持某些资源,如Context,Cursor,IO流的引用,资源得不到释放造成内存泄露。

3.static关键字的使用

static 是Java中的一个关键字,当用它来修饰成员变量时,那么该变量就属于该类,而不是该类的实例。所以用static修饰的变量,它的生命周期是很长的,如果用它来引用一些资源耗费过多的实例,就可能会造成内存的泄露。

针对static的解决方案:

应该尽量避免static成员变量引用资源耗费过多的实例,比如Context.

Context尽量使用ApplicationContext的生命周期比较长,引用它不会出现内存泄露。

使用WeakReference代替强引用。比如可以使用WeakReference<Context> mContext;

4.线程导致内存溢出

线程产生内存泄露的主要原因在于线程生命周期的不可控。如当我们切换横竖屏的时候,一般会重新创建Activity,老的Activity应该被销毁。但是此时我们在子线程中正在进行耗时的操作,老的Activity不会被销毁,这个时候就会出现内存泄露。

解决方案:

将线程的内部类,改为静态内部类。

在线程内部采用弱引用保存Context引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: