`
liu86th
  • 浏览: 117969 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[转]内存管理 --- Android Out Of Memory(OOM) 的详细研究

 
阅读更多

基于Android开发应用时,可能会挺时常出现Out Of Memory 异常.

  在Android中,一个Process 只能使用16M内存,要是超过了这个限定就会跳出这个异常。这样就要求我们要时刻想着开释资源。Java的回收工作是交给GC的,如何让GC能实时的回收已经不是用的对象,这个里面有许多技巧,各人可以google一下。 

  因为总内存的施用超过16M而引起OOM的情况,非常简单,我就不继续展开说。值当注意的是Bitmap在不用时,肯定是要recycle,不然OOM是非常容易出现的。 

  本文想跟各人一起讨论的是另外一种情况:明明还有许多内存,但是发生OOM了。 

  这类情况时常出现在生成Bitmap的时候。有兴趣的可以试一下,在一个函数里生成一个13m 的int数组。

  再该函数结束后,按理说这个int数组应该已经被开释了,或者说可以开释,这个13M的空间应该可以空出来, 

  这个时候要是你继续生白手起家的百万富翁成一个10M的int数组是没有问题的,反而生成一个4M的Bitmap就会跳出OOM。这个就奇怪了,为啥子10M的int够空间,反而4M的Bitmap不敷呢? 

  这个问题困扰好久,在网上,国外各大论坛搜刮了好久,一般关于OOM的解释和解决方法都是,如何让GC尽快回收的代码风格之类,并没有现实的支出上面所说的情况的根源。 

  直到昨天在一个老外的blog上终于看到了这方面的解释,我理解后归纳如下: 

  在Android中: 

  1.一个进程的内存可以由2个部门组成:java 施用内存 ,C 施用内存 ,这两个内存的和必需小于16M,不然就会出现各人熟悉的OOM,这个就是熬头种OOM的情况。 

  2.越发奇怪的是这个:一朝内存分配给Java后,以后这块内存纵然开释后,也只能给Java的施用,这个估计跟java虚拟机里把内存分成好几块进行缓存的原因有关,反正C就别想用到这块的内存了,所以要是Java突然占用了一个大块内存,纵然很快开释了: 

  C能施用的内存 = 16M - Java某一瞬间占在校大学生创业点子用的最大内存。 

  而Bitmap的生成是路程经过过程malloc进行内存分配的,占用的是C的内存,这个也就说明了,上面所说的的4MBitmap无法生成的原因,因为在13M被Java用过后,剩下C能用的只有3M了。

分享到:
评论

相关推荐

    ANDROIDBITMAP内存限制OOM,OUTOFMEMORY.pdf

    文档标题和描述中提到的“ANDROIDBITMAP内存限制OOM,OUTOFMEMORY”指的就是在处理位图(BITMAP)时超出了虚拟机(VM)的内存预算,导致系统抛出OutOfMemoryError异常。 根据给出的内容部分,我们可以推断出以下知识...

    Android-OOM.rar_memory android_memory for Android_out

    在Android开发过程中,"Out Of Memory"(OOM)错误是一个常见的问题,特别是在处理大量数据、图像或者长时间运行的任务时。这个错误表示应用程序消耗了过多的内存,超过了系统分配的限制,导致系统无法再为该应用...

    android camera out of memory安卓照相机OOM问题的解决

    如果不能使用,请修改根目录下的project.property的android:target为你当前有的target(不知道怎么改的同学可以从8到21一个个数字去试哦) 程序实现点击屏幕后聚焦拍照功能,并把图片存入sd卡camera目录下。但打开时无...

    ANDROIDBITMAP内存限制OOM,OUTOFMEMORY[文].pdf

    在Android开发中,我们经常会遇到内存管理的问题,特别是与Bitmap相关的内存溢出(Out Of Memory,简称OOM)问题。Bitmap对象是Android系统中用于处理图像数据的重要类,但由于其消耗大量的内存,不当使用可能导致...

    Android 图片下载以及内存处理防止OOM内存溢出 源码

    在Android开发中,图片的加载和内存管理是一个关键问题,特别是考虑到防止因内存溢出(Out Of Memory,简称OOM)而导致应用崩溃。本教程将详细探讨如何在Android中有效地进行图片下载和内存处理,以避免OOM的发生。 ...

    Android--memory.rar_android_mobile android

    在Android系统中,内存管理是开发者必须关注的重要一环,因为不当的内存使用可能导致应用程序崩溃或者性能下降,其中最严重的后果就是出现“内存溢出”(Out Of Memory, OOM)。本文将深入探讨如何在Android平台上...

    Android例子源码仿oom的三例瀑布流源码

    在Android开发中,内存管理是至关重要的,尤其是避免出现“Out Of Memory”(OOM)错误。这个"Android例子源码仿oom的三例瀑布流源码"提供了三个示例,帮助开发者理解如何在实际应用中有效地处理内存问题,以及如何...

    Android相册图片解决OOM问题

    在Android开发中,由于内存管理机制的特性,开发者经常面临一个棘手的问题——Out Of Memory (OOM)。尤其是在处理图片时,如果不加以控制,大量图片的加载和显示可能导致应用程序崩溃。"Android相册图片解决OOM问题...

    Android加载大图片OOM异常解决

    在 Android 开发中,加载大图片是一个常见的问题,这可能会引发 OOM(Out of Memory)异常。OOM 异常是指应用程序试图分配超过系统可用内存的内存空间,从而导致应用程序崩溃。为了解决这个问题,开发者需要了解 ...

    android解决OOM

    在Android开发中,"OOM"(Out of Memory)是一个常见的问题,它指的是应用程序在运行过程中耗尽了可用的内存,导致系统无法分配更多的内存资源,从而引发崩溃。为了解决这个问题,开发者需要深入理解Android内存管理...

    android图片墙lrucache oom

    然而,如果不妥善处理,这种大量加载图片的方式可能会导致内存溢出(Out Of Memory,简称OOM),使应用崩溃。本篇文章将深入探讨如何使用LRUCache来解决Android图片墙中的OOM问题。 一、Android OOM简介 当应用程序...

    Android避免内存溢出(Out of Memory)方法汇总

    在Android开发中,内存管理是至关重要的,尤其是避免内存溢出(Out of Memory,简称OOM)。内存溢出会导致应用程序崩溃,影响用户体验。本篇文章将详细阐述如何在Android中有效地防止内存溢出,主要包括理解不同类型...

    Android 图片压缩不OOM,超高保真度

    然而,由于Android系统对内存管理的特性,处理大图时容易导致“Out Of Memory”(OOM)错误,这会严重影响应用的性能和稳定性。本篇文章将围绕“Android 图片压缩不OOM,超高保真度”这一主题,深入探讨如何在保持...

    android 永远不会oom的瀑布流

    瀑布流通常用于电商应用、图片分享平台等,它需要加载和显示众多图片,如果处理不当,很容易导致Out of Memory (OOM)错误。本篇文章将深入探讨如何构建一个“永远不会OOM”的瀑布流,并分析其中的关键技术点。 首先...

    Android内存OOM优化详解.pdf

    Android内存优化是提升应用性能和用户体验的关键因素,尤其是在防止Out Of Memory (OOM)错误方面。本文将深入探讨Android内存管理的基础、内存优化策略、Bitmap的使用及管理、内存泄漏的原因和解决方案,以及如何...

    android 图片下载 防止OOM

    在Android开发中,图片加载是常见的操作,但如果不妥善处理,可能会导致内存溢出(Out Of Memory,简称OOM)问题,尤其是当应用需要加载大量或高分辨率图片时。本篇文章将详细探讨如何在Android中进行图片下载并防止...

    Android加载网络图片与本地图片解决OOM问题

    在Android开发中,图片加载是常见的任务,但同时也是导致内存溢出(Out Of Memory, OOM)问题的主要原因之一。特别是当处理大量图片,如在ListView或RecyclerView中滚动时,如果没有正确的图片管理策略,图片加载...

    android加载大图避免oom

    在Android开发中,由于内存限制,处理大图时经常会出现“Out Of Memory”(OOM)错误,这会导致应用崩溃。本篇文章将详细讲解如何在Android中加载大图以避免OOM问题,参考自博客《Android加载大图避免OOM》。 1. ...

    处理android bitmap oom 2.0版本

    在Android开发中,Bitmap对象是用于处理图像的重要类,但如果不妥善管理,它可能会引发“Out Of Memory”(OOM)错误。这是因为Android设备的内存有限,尤其是当加载大图或大量图片时,容易超出可用内存限制。"处理...

Global site tag (gtag.js) - Google Analytics