Android OOM 问题

本文探讨了Android系统中由于Dalvik VM堆大小限制引发的OOM问题。当进程内存超过最大值时,会抛出错误。通过adb命令可查看heap growth limit。详细介绍了在Log中识别OOM错误、使用MAT工具进行内存分析的方法,以及分析过程中常见的内存消耗原因,如Binder内存耗尽、Bitmap未释放和未正确管理的监听器等。
摘要由CSDN通过智能技术生成

一.引言
Android系统对dalvik的vm heapsize是有硬性限制的,当java进程申请空间超过MAX值的时候,就会抛出OOM异常,可以通过如下命令,查看这个MAX值。
adb shell getprop | grep dalvik.vm.heapgrowthlimit

二.详述
1. 一般出现OOM的时候,在Log中是能够很明显看出来的,这里注意oom是一个error而非异常哟!
诸如信息:
Casued by:java.lang.OutOfMemoryError:Failed to allocate …… until OOM
…….
…….

Log中的信息只是打印了出现oom的当时那一次的backtrace,并不代表是这个backtrace引起的内存泄漏,因为在这之前进程就已经超过了MAX值。log只能看到这里,深入分析就需要用工具了,最常用的当然是mat工具了(Memory Analyzer)。

下载地址是:http://www.eclipse.org/mat/

2.常用的分析手段
A.使用下面的命令抓取对应进程的hprof文件:
adb shell am dumpheap com.android.test /sdcard/temp.hprof

B.抓取复现时候某一次的该进程的内存占用情况:
adb shell dumpsys meminfo com.android.test > meminfo.txt

C.hprof文件需要转换成mat工具可以识别的文件:
使用S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值