文档章节

MAT android 内存管理工具分析

bAnxIan_coder
 bAnxIan_coder
发布于 2015/01/26 11:52
字数 926
阅读 81
收藏 0

前段日子写的一个APP总是碰上OOM的问题,一直找不到问题出在哪儿,因为编写代码的过程跟以前的APP没有太大的改变出入,然后无奈使用MAT(Memory Analyzer tool)分析了整个APP所占用的内存及使用过程中的内存变化。


首先是使用DDMS工具看了一下我的APP系统进程在刚运行的时候占用的内存情况,居然高达46M,跟以前写的20M左右超出太大了,大家都知道每个APP在运行的时候dalvik都只会分配最高位64M的内存堆,如果超出了就会报OOM了,然后看了一下内存明细分析情况。占用最大的数量的是 1-byte array(byte[],bollean[])这个玩意儿,具体查看进程所占内存数量方法如下。

在DDMS里面选中你的进程,然后单击 updata heap 再看右侧HEAP窗口,点击Cause GC按钮 这个时候 实时的内存情况就会展示出来了。

这里普及一下HeapSize和Allocated的概念,不做详述,具体可以参照http://www.cnblogs.com/zdwillie/p/3259395.html

这篇博文写的不错,在分析内存的时候最直接的一点就是直接看页面的切换 activity的创建和销毁 会不会导致 heapsize的无限增长,大家都知道JAVA是有GC的,HEAPSIZE一直在增长,那说明很多内存还没有被释放,这里就需要攻城师自己去看看写的代码,有没有把未使用的内存消除引用通知GC去回收内存,当然我碰到的问题最主要的还不是内存未被销毁的问题,是1-byte array占用资源数太大的问题。

下一步就是点击dump hprof file按钮 生成mat内存分析文件

生成的过程中会需要等待几秒。然后大家可以看到mat分析工具的画面

他给我们列出了可能会导致内存泄露的堆模块,a和b,mat害怕我们看不懂还列出了更加具体的描述

以上大体的意思就是system class loader加载"android.graphics.Bitmap"实例有内存聚集,并建议用关键字"android.graphics.Bitmap"进行检查。所以,MAT通过简单的两句话就说明了问题所在,就算使用者没什么处理内存问题的经验。在下面还有一个"Details"链接。关于Detail具体的分析就不做重复描述了,网上大神分析的各种多。

在这里就可以很明显的看出在整个APP加载的时候会把res资源所有都加载进内存空间里面,那么我的问题就出在这里,于是我去检查了一下我的图片大小,发现UI处理的某些文件特别大,我都没有注意,挨个修改之后,整个heapsize终于减小到20M了,当前最紧要的问题终于解决了。也不会再报OOM了。但是再细分下去我会发现我写的代码的问题很多,比如实体类经常会多很多没用的成员变量这些都是很占用内存的,还有比如context的引用也是这样,重复引用重复创建会导致内存一直增加,http://www.cnblogs.com/zdwillie/p/3259395.html   这篇博文写的很好很细致,可以有空看一下。

以上记录作为自己的总结加深记忆。


© 著作权归作者所有

bAnxIan_coder
粉丝 6
博文 14
码字总数 13487
作品 0
杭州
程序员
私信 提问
Android应用内存泄漏的定位、分析与解决策略

Hello,大家好,我是Clock。翻了一下简书,发现有一个多月没有更新博客,本来今天打算和妹纸去电影院看《你的名字》,然后再去到处浪的。 结果因为妹纸公司临时有事,她不得不回公司一趟......

D_clock爱吃葱花
2018/06/29
0
0
[Android]App 内存泄漏检查工具MAT

Android App发生内存泄漏,常见的有Bitmap 使用后沒有recycle(),Drawable 使用后沒有setCallback(null)等。 Eclipse 有个插件工具MAT(Memory Analyzer Tool)可以帮助定位内存泄漏的对象。 ...

清水湾2012
2013/08/01
471
1
Android内存泄漏分析实战

内存泄漏简介 java可以保证当没有引用指向对象的时候,对象会被垃圾回收器回收,与c语言自己申请的内存自己释放相比,java程序员轻松了很多,但是并不代表java程序员不用担心内存泄漏。当jav...

拉偶有所依
2015/06/26
8.3K
1
Android中如何查找内存泄露

1、首先确定是否有内存泄露及哪个程序造成。 1.1、内存泄露已弹出out of memory对话框的情况。 这种情况很简单,直接看对话框就知道是哪个应用的问题了。然后再分析该应用是否是因为内存泄露...

chengche
2013/11/27
64
0
Android性能优化:手把手带你全面实现内存优化

前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录 1. 定义 优化处理 应用程序的内存使用、空间占用 2. 作用 避免因不正确使用内存 & 缺...

codeGoogle
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
12
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部