内存泄露和内存溢出

来源:互联网 发布:java多线程调用单例 编辑:程序博客网 时间:2024/06/05 09:11


内存泄露:

memory leak

是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。


1.将线程的内部类改为静态内部类.(非静态内部类会持有对外部类的引用,而静态内部类则不会).

包括及时释放资源,static,cursor,IO

2采用弱引用保存context引用(weakreference)


(关于内存泄露的检测)这里


内存溢出:

out of memory是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

1,图片过大导致 OOM :


对图片采用软引用,及时地进行 recyle()操作


SoftReference<Bitmap> bitmap = new SoftReference<Bitmap>(pBitmap);if(bitmap != null){if(bitmap.get() != null && !bitmap.get().isRecycled()){bitmap.get().recycle();bitmap = null;}} 

2,横竖屏反复切换:

(1)除去xml文件中大的图片背景,设置改由Activity中加载.

(2)直 接 把 xml 配 置 文 件 加 载 成 view 再 放 到 一 个 容 器 里 , 然 后 直 接 调 用this.setContentView(View view);方法,避免 xml 的重复加载。

3、 在页面切换时尽可能少地重复使用一些代码
比如:重复调用数据库,反复使用某些对象等等......
常见的内存使用不当的情况
 


4,在构建adapter时没有使用convertView.


5,Bitmap使用时没有及时使用recycle释放内存.(不是必须,看内存情况)




0 0
原创粉丝点击