Android避免Out of Memory问题【原创】

栏目: IOS · Android · 发布时间: 5年前

内容简介:Android中的out of memory问题,其实跟Java中的类似。主要的原因是对象一直存在内存中,无法被gc清理。在Java中内存对象分为强引用、软引用、弱引用、虚引用四类。我们大多数是用的是强引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。这也是问题的关键。处理这种问题有三个办法:

Android中的out of memory问题,其实跟 Java 中的类似。主要的原因是对象一直存在内存中,无法被gc清理。

在Java中内存对象分为强引用、软引用、弱引用、虚引用四类。我们大多数是用的是强引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

这也是问题的关键。处理这种问题有三个办法:

1、释放强引用

其实就是在使用完对象后手动设置为null;

Object obj = new Object();
obj = null;

2、使用软引用

软引用是内存空间足够时,垃圾回收器就不会回收它;直到虚拟机报告内存不够时才会回收, 只要垃圾回收器没有回收它,该对象就可以被程序使用。

在jvm报告内存不足之前会清除所有的软引用,这样的话gc就可以收集到很多软引用释放出来的内存空间,从而解决内存吃紧的问题,避免内存溢出,什么时候被回收取决于gc的算法和gc运行时可用的内存大小。

SoftReference strSoft = new SoftReference(str);

3、使用弱引用

弱引用是在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间是否足够,都会回收它的内存。

WeakReference<String> strWeak = new WeakReference<String>(str);

在Android中,主要可能出现Out of Memory是在处理大图片时会出现。说到大图,第一想到的肯定是压缩,压缩了有的时候还是很占空间。但是对于图片操作的bitmap类,是个强引用。所以在使用完之后,还要对它进行手动释放回收。

if (!bitmapObject.isRecyled()) {
     bitmapObject.recycle();
     System.gc();
}

还有一个问题是图片的质量。Android中Bitmap有四种图片色彩模式:

  • ALPHA_8:每个像素需要占用内存中的1byte
  • RGB_565:每个像素需要占用内存中的2byte
  • ARGB_4444:每个像素需要占用内存中的2byte
  • ARGB_8888:每个像素需要占用内存中的4byte

创建Bitmap时,默认的色彩模式是ARGB_8888的,这种色彩模式是质量最高的,当然这样的模式占用的内存也最大。所以我们一般为了保证质量,使用RGB_565。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/25106.html

Android避免Out of Memory问题【原创】

Android避免Out of Memory问题【原创】 微信打赏

Android避免Out of Memory问题【原创】 支付宝打赏

感谢您对作者Bob的打赏,我们会更加努力!    如果您想成为作者,请点我


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax Design Patterns

Ajax Design Patterns

Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99

Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码