码迷,mamicode.com
首页 > 其他好文 > 详细

内存溢出与内存泄漏

时间:2017-05-15 00:34:36      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:context   and   解决   成员变量   软引用   分享   内存泄漏   堆内存   构造   

内存溢出

产生原因

Android 的虚拟机是基于寄存器的Delvik,它的最大堆内存是16M,有的机器是24M,因此所能用的内存空间是有限的,如果我们的内存占用超过一定水平就会出现OOM异常

对象内存过大

---------保存了多个好用内存的过大的对象(比如Bitmap,XML文件),造成内存超出限制

图片过大导致OOM

  • 等比例压缩图片
  • 对图片采用软引用,即使回收
  • 界面切换OOM
1.查看页面布局中有没有大的图片比如背景图之类的
2.直接把XML配置文件加载成View放到容器中
3.页面切换时尽可能少的重复使用一些代码
  • 查询数据库没有关闭游标
  • 构造Adapter没有使用缓存的convertView
  • Bitmap不使用及时回收

 

内存泄漏

  • 资源没有及时释放
程序代码中长期保持某些资源,比如Context、Cursor,IO流的引用,资源得不到释放造成内存泄漏
  • static 关键字的使用
  • ---------用static修饰的成员变量属于该类,而不是该类的实例,所以用static修饰的变量他的生命周期是很长的,如果用它来应用一些资源会耗费过多的实例在context中最多

解决方案

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

context尽量使用ApplicationContext,因为他的生命周期比较长,引用他不会出现内存泄漏问题

使用弱引用代替强引用

  • 线程生命周期的不可控性

技术分享

 

内存溢出与内存泄漏

标签:context   and   解决   成员变量   软引用   分享   内存泄漏   堆内存   构造   

原文地址:http://www.cnblogs.com/fanfusuzi/p/6854427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!