2019独角兽企业重金招聘Python工程师标准>>>

用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就可以了,只是辅助,不必过分依赖,他并不是万能的,不是所有错误都能找出来。

转载于:https://my.oschina.net/yingkui/blog/748341

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

  1. OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具

    用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...

  2. 软文推荐:常用 Java 静态代码分析工具的分析与比较

    http://www.uml.org.cn/j2ee/201107114.asp 常用 Java 静态代码分析工具的分析与比较 作者:赵卓 , 发布于2011-07-11 , IBM 简介: 本文首先 ...

  3. Java 静态代码检查工具及其原理

    Intellij IDEA 静态代码检查工具: checkstyle.pmd.findbugs. Alibaba Java Coding Guidelines; 三种工具的对比 工具 目的 检查项 F ...

  4. 静态代码分析工具简介

    静态代码分析工具简介 什么是静态代码分析 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句 ...

  5. 静态代码检查工具简介

    静态代码检查工具简介 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷.传统的代码复审.同行评审,通过人工方式来检查缺陷仍然是一件耗时耗力的事情.Java 静态代码分 ...

  6. 搞懂静态代码分析,看这文就够了!

    作者 | 赖建新 来源 | 鉴释 封图 | 东方IC 什么是静态代码分析? 静态代码分析是指在不实际执行程序的情况下,对代码语义和行为进行分析,由此找出程序中由于错误的编码导致异常的程序语义或未定义的 ...

  7. 在SDLC中使用静态代码分析的最佳实践

    http://vultrace.cn更多精彩,尽在个人博客. 文章翻译自ncc group的论文,论文超长预警,请耐心观看. Best Practices for the use of Static ...

  8. 静态代码分析工具列表分析---代码分析工具列表(30款工具)

    本文是一个静态代码分析工具的清单,共有30个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...

  9. 静态代码分析工具清单:开源篇(各语言)

    本文是一个静态代码分析工具的清单,共有26个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...

最新文章

  1. リアルタイム3Dニャンニャン 汉化补丁
  2. 3、MySQL查看存储过程
  3. Fedora10 以root身份自启动
  4. C++ 学习基础篇(一)—— C++与C 的区别
  5. php裁剪图片并上传源码,改写jcrop插件+php的图片上传实现与裁剪一体化
  6. 计算机专用英语词汇pdf,计算机专用英语词汇1500词.pdf
  7. win7可以运行的mysql,win7下mysql安装
  8. [INS-30131] 执行安装程序验证所需的初始设置失败。
  9. Grafana WebHook 报警通知踩坑系列,支持报警截图发钉钉卡片报警!!!
  10. libevent的线程优雅的退出方式
  11. ES6-04:函数的扩展
  12. 15. 发货选项(Shipping Options)
  13. 一周信创舆情观察(11.1~11.7)
  14. h5分享图片到微信好友、微信朋友圈、qq好友功能
  15. 最新出炉的阿里巴巴面试题及答案汇总(513页)
  16. 人类异常行为识别数据集汇总【转载】(附链接)
  17. 2016版excel_Excel怎么转换成pdf?教你三招超简单方法
  18. 音频转换器怎么将ogg转换mp3格式
  19. 开源堡垒机 Jumpserver 入门教程
  20. 安卓开发学习日记第一天(笑)_Android Studio3.6安装_莫韵乐的快乐笔记

热门文章

  1. HEVC官方代码下载及码流分析软件使用
  2. C++类所占大小的问题
  3. Python21天打卡Day11-dict和json格式互转
  4. 低代码开发平台_如何挑选最适合你的低代码开发平台
  5. 计算机控制系统复习提纲,《计算机控制系统》复习要点
  6. xp系统更新的服务器失败是怎么回事啊,xp系统显示“服务器错误500”的两种解决方法...
  7. python requests网页爬取初探
  8. oracle无会话锁表,深入浅出oracle锁 原理篇 停止无反应的sql会话
  9. pythonjam安装库_python及pycharm的安装
  10. 让我们了解下什么是智能客服(问答)