文档章节

如何分析android的OOM,与java静态代码分析工具

踏雪秋菊
 踏雪秋菊
发布于 2016/09/19 09:32
字数 624
阅读 68
收藏 0

用MAT分析OOM

很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause。根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用。

当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具MAT。

1、下载MAT

http://www.eclipse.org/mat/downloads.php

一般我们的开发环境都选择了Eclipse,所以直接安装插件版的就可以了。

2、使用方法,可以看这篇博文:

http://www.cnblogs.com/Android-and-android/archive/2013/03/05/2943863.html

3、重点理解 Retained Heap、GC Root

http://blog.csdn.net/hhww0101/article/details/8133219

4、如何定位

首 先要知道复现OOM的操作步骤,如果是随机测试出的,也需要找到一个有效的复现步骤才行。然后分别取操作前的 .hprof,和操作后,内存增长后的 .hprof。如果内存不断增长,可取3,4次。然后分别打开 直方图(Histogram)视图,在对象列表中,对比每个对象的 Retained size的变化。

排在第一位的不一定是泄露对象,有可能它本身正常情况就很消耗内存。

泄露的对象是那个突然排名上升的。区分方法是看每个对象的内存地址,地址相同的是同一对象(前提是进程一直运行,没有重启过,重启后内存地址就都变了)。

出 现怀疑对象后,右键 List Objects > with incoming references,可以排除WeakReference 等引用,顺着树节点向下找,如果出现程序中的 Activity,或者某个全局对象,基本就可以确定是它没释放造成的。要更深一步分析为什么没释放,如果逻辑复杂,难于捋清,可以直接做 workaround,想办法释放这个对象就可以了 (set object = null)。

java静态代码分析工具

写代码过程中难免会有疏漏,我们也可以借助工具分析,这里是常用的java静态代码分析工具:

http://www.oschina.net/question/129540_23043

个人觉得Find Bugs 和 PMD就可以了,只是辅助,不必过分依赖,他并不是万能的,不是所有错误都能找出来。

本文转载自:http://www.yinqisen.cn/blog-315.html

踏雪秋菊
粉丝 0
博文 50
码字总数 320
作品 0
沈阳
私信 提问
Android内存泄露与内存溢出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zping0808/article/details/53889115 一、 内存泄漏与内存溢出(OOM) 1. 内存泄露 垃圾回收器无法回收原本应...

_zping
2016/12/26
0
0
Android Bitmap变迁与原理解析(4.x-8.x)

App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在...

看书的小蜗牛
2018/05/22
0
0
Android内存管理、监测剖析

Android内存管理机制 Android内存管理主要有:LowMemory Killer机制,Ashmem,PMEM/ION及Native内存和Dalvik内存管理管理和JVM垃圾回收机制。 LowMemory Killer机制 源码位置drivers/staging...

Jerikc
2015/01/14
315
0
Android可见APP的不可见任务栈(TaskRecord)销毁分析

Android依托Java型虚拟机,OOM是经常遇到的问题,那么在快达到OOM的时候,系统难道不能回收部分界面来达到缩减开支的目的码?在系统内存不足的情况下,可以通过AMS及LowMemoryKiller杀优先级...

看书的小蜗牛
01/07
0
0
BATJ等大厂最全经典面试题分享

金九银十,又到了面试求职高峰期,最近有很多网友都在求大厂面试题。正好我之前电脑里面有这方面的整理,于是就发上来分享给大家。 这些题目是网友去百度、蚂蚁金服、小米、乐视、美团、58、...

老道士
2018/09/26
158
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.8K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
5
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部