android 内存溢出的一些想法

  对于android内存溢出这个问题,小编很是头痛!在这里说下小编自己的想法!

  首先内存引用分为强引用,弱引用,软引用,虚引用!

  强引用是一个实例引用,根据java的gc原理,如果存在引用,就无法自动回收,所以强引用必须在用完后使其=null

  ex:Object object = new Object();

     object = null;

  软引用是在强引用的基础上引用,使用Softreference进行引用,它是除非系统内存不足时才会回收,其它时候均不会回收,适合做cache;

  ex:

  Object object = new Object();

  SoftReference<Object>  objectSoft = new SoftReference<Object> (object);

  弱引用是可以随时获得某对象的信息,又不影响gc

  ex:  

   Object object = new Object();

  WeakReference<Object>  objectWeak = new WeakReference<Object> (object);

  虚引用就是没有的意思,建立虚引用之后通过get方法返回结果始终为null,虚引用通常会把引用的对象写进referent,只是get方法返回结果为null.

  Object object = new Object();

  PhantomReference<Object>  objectphantom = new PhantomReference<Object> (object,referenceQueue);(引用队列)

  在这里可以说明imagebitmap经常会出现内存溢出,不是手机内存不足,而是因为手机给应用分配的内存并不是所有内存,而是有限制,在这里一般将图片进行等比压缩。

  还有一个问题,android的应用层是使用java编写,而他的底层是由c编写,这就会造成一个问题,java有自动回收机制,而c语言没有。所以必要时需要手动催动回收机制!

  ex:

  if(bitmapObject.isRecycled()==false){

  bitmapObject.recycle();

  system.gc();//提醒系统及时回收,ps:仅仅是提醒,不会立即执行

}

  以上就是小编浅显的关于内存溢出的一些看法!

				
时间: 2024-10-26 01:44:22

android 内存溢出的一些想法的相关文章

关于内存溢出的一些想法(Android)

Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析 关于内存溢出的一些想法(Android) http://m.oschina.net/blog/54936 1. 能用 Application  的 上下文 就用. 因为如果用 Activity 的 Context ,如果用太多的 Activity, 如果 有些资源 还在引用 Activity的context的资源,会导致 这个 Activity 没有被回收,有可能导致 oom. 2. bitmap 回

【转载】Android 内存溢出如何发生的。

且谈Android内存溢出 前言 关于android的内存溢出在创新文档库中也有不少,网络上也有很多这方面的资料.所以这遍文章不算是正真意义上的创新,仅仅只是对xxx源码中出现的一些android开发中容易犯错的代码习惯一次总结. 1.  Android的内存溢出是如何发生的 Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M,有的机器为24M.因此我们所能利用的内存空间是有限的.如果我们的内存占用超过了一定的水平就会出现OutOfMemory的错误. 原因主要有两个:

【Android】Android内存溢出问题---用自行开辟的空间进行对内存管理

public static Bitmap readBitmap(String path) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPurgeable = true; options.inInputShareable = true; options.inSampleSize = compute

Android 内存溢出管理与测试

今天发现正在做的项目,时不时的会报错:dalvikvm heap out of memory on a 7458832-byte allocation (堆分配的内存溢出) 为什么会内存溢出呢?我以前从未遇见这种情况.后来在网上查了查资料,还是挺多的. 怎么说呢?因为Android开发基本上是以java语言为基础,那么程序是在java虚拟机上运行的.而虚拟机不允许单个程序中的Bitmap占用超过8M的内存,从报错的日志可以看出:7458832-byte大约就是7M多的样子,基本吻合上述数据.在我

各路搜集,分析Android内存溢出

叙述不当之处,欢迎指正. Android主要应用在嵌入式设备当中,而嵌入式设备由于一些众所周知的条件限制,通常都不会有很高的配置,特别是内存是比较有限的.如果我们编写的代 码当中有太多的对内存使用不当的地方,难免会使得我们的设备运行缓慢,甚至是死机.为了能够使得Android应用程序安全且快速的运行,Android 的每个应用程序都会使用一个专有的Dalvik虚拟机实例来运行,它是由Zygote服务进程孵化出来的,也就是说每个应用程序都是在属于自己的进程中运行的.一方面,如果程序在运行过程中出现

android 内存溢出问题分析

最近的项目中,内存一直再增长,但是不知道是什么问题,导致内存溢出,在网上看到了这么一篇关于内存分析与管理的文章,解决了部分问题,感觉这篇文 章还不错,就转帖到我的blog上了,希望对大家有所帮助.如果哪里有不好的地方,给留下言,然后我们大家继续完善内存泄露的问题,对大家都会有所帮助 的,呵呵 一.概述 1 二.Android(Java)中常见的容易引起内存泄漏的不良代码 1 (一) 查询数据库没有关闭游标 2 (二) 构造Adapter时,没有使用缓存的 convertView 3 (三) Bi

android内存溢出问题

最近的项目中,内存一直再增长,但是不知道是什么问题,导致内存溢出,在网上看到了这么一篇关于内存分析与管理的文章,解决了部分问题,感觉这篇文章还不错,就转帖到我的blog上了,希望对大家有所帮助.如果哪里有不好的地方,给留下言,然后我们大家继续完善内存泄露的问题,对大家都会有所帮助的,呵呵 一.概述 1 二.Android(Java)中常见的容易引起内存泄漏的不良代码 1 (一) 查询数据库没有关闭游标 2 (二) 构造Adapter时,没有使用缓存的 convertView 3 (三) Bitm

Android 内存溢出解决方案(OOM)

众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文件.视频文件等多媒体资源:由于Android系统对音频.视频等资源做了边解析便播放的处理,使用时并不会把整个文件加载到内存中,一般不会出现内存溢出(以下简称OOM)的错误,因此它们的内存消耗问题暂不在本文的讨论范围.本文重点讨论的是图片的内存消耗问题,如果你要开发的是一款图片浏览器应用,例如像And

Android 内存溢出解决方案(OOM) 整理总结

标签:Android加载大 Android 移动开发 在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,特此,今天在不同型号的三款安卓手机上做了测试,因为有效果也有结果,今天小马就做个详细的总结,以供朋友们共同交流学习,也供自己以后在解决OOM问题上有所提高,提前讲下,片幅有点长,涉及的东西太多,大家耐心看,肯定有收获的,里面的很多东西小马也是学习参考网络资料使用的,先来简单讲下下: 一般我们大家在遇到内存问题的时候常用的方式网上也有