`

(二)OOM(Out Of Memory)

 
阅读更多

前面我们提到过使用getMemoryClass()的方法可以得到Dalvik Heap的阈值。简要地获取某个应用的内存占用情况可以参考下面的示例(更多内存查看的知识,可以参考Google官方教程: Investigating Your RAM Usage

1)查看内存使用情况

通过命令行查看内存详细占用情况,如图3所示。

 

图3  命令行查看内存详细占用情况

通过Android Studio的Memory Monitor查看内存中Dalvik Heap的实时变化,如图4、5、6所示。

图4  Memory Monitor查看内存中Dalvik Heap的实时变化(一)


图5  Memory Monitor查看内存中Dalvik Heap的实时变化(二)


图6  Memory Monitor查看内存中Dalvik Heap的实时变化(三)

2)发生OOM的条件

关于Native Heap、Dalvik Heap、PSS等内存管理机制比较复杂,这里就不展开详细描述。简单的说,通过不同的内存分配方式(malloc/mmap/JNIEnv/etc)对不同的对象(Bitmap/etc)进行操作,会因为Android系统版本的差异而产生不同的行为,对Native Heap与Dalvik Heap以及OOM的判断条件都会有所影响。在2.x的系统上,我们常常可以看到Heap Size的total值,明显超过了通过getMemoryClass()获取到的阈值而不会发生OOM的情况。那么,针对2.x与4.x的Android系统,到底如何判断会发生OOM呢?

 

  • Android 2.x系统GC LOG中的dalvik allocated + external allocated + 新分配的大小 >= getMemoryClass()值的时候就会发生OOM。 例如,假设有这么一段Dalvik输出的GC LOG:GC_FOR_MALLOC free 2K, 13% free 32586K/37455K, external 8989K/10356K, paused 20ms,那么32586+8989+(新分配23975)=65550>64M时,就会发生OOM。
  • Android 4.x的系统废除了external的计数器,类似Bitmap的分配改到Dalvik的Java Heap中申请。只要allocated + 新分配的内存 >= getMemoryClass()的时候就会发生OOM,如图7所示(注:虽然图示演示的是ART运行环境,但是统计规则还是和Dalvik保持一致)。

 

 

图7

分享到:
评论

相关推荐

    ANDROIDBITMAP内存限制OOM,OUTOFMEMORY.pdf

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

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

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

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

    如果不能使用,请修改根目录下的project.property的android:target为你当前有的target(不知道怎么改的同学可以从8到21一个个数字去试哦) ...但打开时无自动聚焦,这个问题有需要的同学可以自己加上去哦。...

    Pytorch GPU显存充足却显示out of memory的解决方式

    在使用PyTorch进行深度学习模型训练时,有时会遇到一个常见的问题,即GPU显存充足,但在运行过程中却报出“out of memory”错误。这种情况可能会让人困惑,因为直观上,既然显存足够,就不应该出现这样的问题。本文...

    Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常

    Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常 1、高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们...

    OOM分析工具-MemoryAnalyzer.zip

    当应用程序出现Out of Memory (OOM)错误时,通常意味着系统无法分配足够的内存来执行任务,这时就需要借助专业的分析工具来查找问题的根源。MemoryAnalyzer(MAT)是IBM开发的一款强大的JVM堆内存分析工具,它能够...

    string-concatenate-outofmemory.rar_crash

    "string-concatenate-outofmemory.rar_crash" 这个标题暗示了一个与字符串连接(concatenation)有关的问题,可能在特定条件下导致程序崩溃。描述中提到的测试目标是检查连续的字符串拼接是否会抛出异常,而不是直接...

    Android-OOM.rar_memory android_memory for Android_out

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

    解决Pytorch 训练与测试时爆显存(out of memory)的问题

    在使用PyTorch进行深度学习模型的训练和测试过程中,可能会遇到“显存溢出”(Out of Memory,OOM)的问题。这个问题通常是由于GPU内存不足以存储所有计算所需的张量而导致的。以下是一些解决PyTorch训练与测试时...

    Android完美解决GridView异步加载图片和加载大量图片时出现Out Of Memory问题

    然而,当处理大量图片时,特别是在用户滚动时实时加载,可能会遇到内存溢出(Out Of Memory,简称OOM)的问题。这是因为Android系统为每个应用程序分配的内存有限,而加载大图或大量图会消耗大量内存。因此,我们...

    elasticdump报错

    FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 1: node::Abort() [node] 2: 0x8cd49c [node] 3: v8::Utils::ReportOOMFailure(char const*, bool) [node] 4: v8::...

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

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

    有关OOM KILLER的一些理解

    这个过程涉及到了几个核心的源代码文件,如`badness.c`、`selectbadprocess.c`和`outofmemory.c`。 `badness.c`包含了计算进程"badness"值的代码。"badness"是一个评估进程内存使用情况和优先级的指标,它综合考虑...

    MySQL OOM(内存溢出)的解决思路

    OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...

    【性能】OOM原理解析:LowMemoryKiller原理

    1 概述 Android的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便...Android基于Linux的系统,其实Linux有类似的内存管理策略——OOM killer,全称(Out Of Memory Killer), OOM的策略更多的是用于分配内存

Global site tag (gtag.js) - Google Analytics