Android内存泄露---检测工具篇
内存使用是程序开发无法回避的一个问题。如果我们毫不在意肆意使用,总有一天会为此还账,且痛不欲生...所以应当防患于未然,把内存使用细化到平时的每一行代码中。
内存使用概念较大,本篇先讲对已有app如何检测并发现内存泄露的点,从而进行下一步的修复处理。
之后会写关于内存的理论篇。
内存检测的思路依次是:
静态检测-->工具检测--->修复
内存并非只有OutOfMemory的Crash影响,当可用内存较小时,频繁的gc会导致应用变“卡”
下面我们来讲解下定位内存泄露我们利用的一些工具
0x1.静态代码扫描工具
1.God Eye
Godeyes是一款专注于无线App代码Crash隐患静态扫描的工具,同时提供了固定规则的内存泄露检测。比如我们老生常谈的游标关闭问题,流关闭问题,都可以通过静态代码扫描排查。
涵盖Android和IOS双平台。
官网:http://godeyes.duapp.com/
Android下Studio的使用方式官网介绍的比较清晰,按照步骤来即可
http://godeyes.duapp.com/readme.jsp
0x2 工具检测
1.Android Studio
Studio比Eclipse强大太多了。自带的许多小工具可以辅助我们做许多事情。
自带的Memory Monitors可以进行初步的内存分析。
我们使用它进行
a.发现大内存对象分配的场景
b.发现内存不断增长的场景:
重复操作一个动作,内存一直增加不会减少
c.确定卡顿问题是否因为执行了GC操作造成内存抖动
Java进行GC时,会“stop the world”,也就是jvm会因为执行gc而停止应用程序的执行。单次GC不会占用很多时间,但是显著大量不停的GC必然会占用帧间隔时间段(16ms),使正常计算,渲染时间变少,从而产生页面卡顿。2.3之后GC改为并发,但仍在开始和结束的时候回阻塞
举一个网上找到的修复内存抖动的例子

定位代码之后,修复了String拼接的问题

2.Java Heap
经过上述简单的了解内存使用情况后,我们可以更进一步分析内存的使用。
点击Initate GC之后 Dump Java Heap,通过Analyzer Task可以分析泄露的Activitys和重复的String

3.Start Allocation tracing ---->Stop Allocation tracing
studio会记录这段时间内的内存分配。
举个简单的例子
如果,我们进入应用后使用一段时间,按照内存占用从大到小依次排列

占用1.25%的是一个NetworkStringHttpResponseHandler的261行 printlog
我们打开代码查看,果然是

4.MAT
如果我们怀念以前Eclipse的mat分析方式,我们也是可以的。Captures后右键选择转成标准的hprof格式
可以通过Eclipse MAT查看内存。
官网:http://www.eclipse.org/mat/downloads.php

0x3 LeakCanary
中文说明:http://www.liaohuqiu.net/cn/posts/leak-canary-read-me/
有个略不好的地方是,LeakCanary一次只能检测一个内存泄露
在Android6.0之上的手机,还是有输入法的内存泄露会被检测出来。之前版本已经被LeakCanary屏蔽。
0x4. 结尾
这大概就是常用的一些用法了,当然这里还要提醒一句,工具是死的,人是活的,工具也没有办法保证一定可以将内存泄漏的原因找出来,还是需要我们对程序的代码有足够多的了解,知道有哪些对象是存活的,以及它们存活的原因,然后再结合工具给出的数据来进行具体的分析,这样才有可能把一些隐藏得很深的问题原因给找出来。
Android内存泄露---检测工具篇的更多相关文章
- 【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类
背景 即使到今天,iOS 应用的内存泄露检测,仍然是一个很重要的主题.我在一年前,项目中随手写过一个简单的工具类,当时的确解决了大问题.视图和控制器相关的内存泄露,几乎都不存在了.后来想着一直就那个工 ...
- vld,Bounds Checker,memwatch,mtrace,valgrind,debug_new几种内存泄露检测工具的比较,Valgrind Cheatsheet
概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,内存泄漏是常见的问题.当以前分配的一片内存不再需要使用或无法访问时,但是却 ...
- android 内存泄漏检测工具 LeakCanary 泄漏金丝雀
韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是 无用的对 ...
- vld(Visual Leak Detector) 内存泄露检测工具
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存 ...
- 精准 iOS 内存泄露检测工具
MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22 | zepo | 23 Comments 背景 平常我们都会用 Instrument 的 Lea ...
- memwatch内存泄露检测工具
工具介绍 官网 http://www.linkdata.se/sourcecode/memwatch/ 其功能如下官网介绍,挑选重点整理: 1. 号称功能: 内存泄露检测 (检测未释放内存, 即 动态 ...
- 内存泄露检测工具Valgrind
内存泄露简介 什么是内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果. 内存泄 ...
- Android 内存泄漏检测工具 LeakCanary(Kotlin版)的实现原理
LeakCanary 是一个简单方便的内存泄漏检测框架,做 android 的同学基本都收到过 LeakCanary 检测出来的内存泄漏.目前 LeakCanary 最新版本为 2.7 版本,并且采用 ...
- linux下内存泄露检测工具Valgrind介绍
目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...
随机推荐
- java中HashMap详解(转)
java中HashMap详解 博客分类: JavaSE Java算法JDK编程生活 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成 ...
- Altera CYCLONE III FPGA BGA布线
最近在做altera FPGA BGA相关的布线工作,收集了一些资料,公开出来以供大家讨论. 首先是器件引脚,只有弄清楚器件各个引脚的功能才能够进行布线,下面的文档详细描述了每个引脚的功能. 各引脚功 ...
- JDBC 数据库连接池
http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html JDBC 数据库连接池 小结 当对数据库的访问不是很频繁时,可以在每次 ...
- iOS多页面传值方式之单例传值singleton
// 要实现单例传值,那就必须得新建一个类做为单例 提供创建该类对象的类方法(因为是要在alloc开辟内存空间后赋值).所有在.h文件中声明该方法 + (instancetype)defaultUII ...
- iOS完美版的UIScrollView无缝循环:你值得一看
可以直接copy运行研究 .m头文件和声明的常量(宏和const) #import "ViewController.h" // UIScrollView的尺寸 const CGFl ...
- mysql问题: alter导致速度慢
1 如何并行执行. 数据库里有一个数据量非常大的表,当对这个表进行alter的时候,这时候该表是只读的,由于数据量很大alter时间很长,如果这时候有insert或update操作,有什么办法在这期间 ...
- VSC#2010打开视图编辑器假死/卡死
最近写项目代码的时候写C#,VSC#2010刚配置好,打开之前同学写的项目的设计界面结果...我擦,卡死了,重复几次都是这样. 于是上网搜发现是VS一个bug,打一个VSSP1补丁就好了~ http: ...
- Eclipse perl的IDE环境插件-EPIC
前提:1.安装好perl环境:ActivePerl(验证方法:cmd中输入 perl -v 看是否有反应~) 2.安装Eclipse 3.0以上版本 可选:安装PadWalker包,主要是全局变量跟踪 ...
- iOS开发——二级列表
原理很简单,一级菜单放在viewForHeaderInSection里面,加一个点击事件,然后判断它的二级菜单(cell)显不显示. 直接上代码吧! // // HeheTableViewContr ...
- 巧用HTML5给按钮背景设计不同的动画
如何巧用HTML5设计按钮背景不同动画特效,在该特效中,当鼠标滑过按钮时,使用CSS3 animation 来动画 background-size 和 background-posit ...