1 LeakCanary(最常用,能监控整个App内存泄漏情况)

1.1 使用LeakCanary

// 仅在debug包启用LeakCanary
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'

1.2 效果

1.3 如何修复内存泄漏?

LeakCanary官方文档翻译

Fixing a memory leak

1.4 记一次内存泄露例子

记一次Fragment的内存泄露

1.5 官方链接

leakcanary-----github

2 Lint分析工具

(1)概述
lint是随Android SDK自带的一个静态代码分析工具。它用来对Android工程的源文件进行检查,找出在正确性、安全、性能、可使用性、可访问性及国际化等方面可能的bugs和可优化提升的地方,在提交版本前检查非常有必要,作用明显。
(2)lint工作流程
针对我们的项目,通过lint.xml配置lint分析的选项,执行检查后,会针对要分析的issue生成报告。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z830SMnV-1584254978730)(https://img-blog.csdn.net/20131227095352671)]
(3)分析的范围
要对Android项目进行静态分析,首先就是指定要分析的源文件的范围。包括以下方面:

整个工程或模块。
目录和文件。
xml和java文件中使用标签和注解来忽略检查。
lint检查结果分warning和error两个等级,可以忽略warning问题。

(4)检查的方面

检测资源文件是否有没有用到的资源。
检测常见内存泄露
安全问题SDK版本安全问题
是否有费的代码没有用到
代码的规范---甚至驼峰命名法也会检测
自动生成的罗列出来
没用的导包
可能的bug

(5)在Android Studio中使用
在Android Studio中,通过菜单或者在Project视图以及代码视图中的右键菜单中选择Analyze > Inspect Code就可以打开lint检查的对话框Specify Inspection Scope,在这里设置好要进行代码分析的范围,确定后工具就开始对代码进行检查了,完成后会自动打开Inspection工具窗口。下图,左边是分类了的问题,选中一个问题后,右边是针对此问题的详细说明。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TEhMpafT-1584254978731)(https://img-blog.csdn.net/20161115144548240)]
(6)小结
使用lint进行代码的检查和分析十分简单高效,在发布版本前,使用lint对工程进行优化,何乐而不为。
(7)参考链接
Android代码分析工具lint学习

3 Allaction Tracking(Android Studio版)

追踪内存分配信息,按顺序排列,这样我们就能清晰看出来某一个操作的内存是如何一步一步分配出来的。比如在有内存抖动的可疑点,我们可以通过查看其内存分配轨迹来看短时间内有多少相同或相似的对象被创建,进一步找出发生问题的代码。

3.1 参考链接介绍

Android性能专项测试之Allocation Tracker(Android Studio)

3.2 追踪内存分配使用方法

(1)Start
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YJU60FVx-1584254978732)(https://img-blog.csdn.net/20161114212351747)]

(2)Stop

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZ4eOfJm-1584254978732)(https://img-blog.csdn.net/20161114212408902)]

(3)分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndiFLQR9-1584254978733)(https://img-blog.csdn.net/20161114212420746)]

3.3 内存分配大案例

(1)图显示分配次数1W多次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2RMhZ1w-1584254978733)(https://img-blog.csdn.net/20161118100636319)]

(2)分配占了很大比重
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNfpbM7F-1584254978733)(https://img-blog.csdn.net/20161118100649710)]

性能优化之内存泄露(Memory Leak)常用分析工具(另3种)相关推荐

  1. SQL Server 内存泄露(memory leak)——游标导致的内存问题

    原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...

  2. Android 内存管理 Memory Leak OOM 分析

    转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...

  3. Android性能优化(1) 内存泄露 amp; 解决方案

    前言 在Android中,内存泄露的现象十分常见:而内存泄露导致的后果会使得应用Crash 本文 全面介绍了内存泄露的本质.原因 & 解决方案,最终提供一些常见的内存泄露分析工具,希望你们会喜 ...

  4. 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别

    内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数 ...

  5. 什么是内存溢出(Out Of Memory---OOM)和内存泄露 (Memory Leak)

    1.内存溢出:(Out Of Memory---OOM) 系统已经不能再分配出你所需要的空间,比如系统现在只有1G的空间,但是你偏偏要2个G空间,这就叫内存溢出 例子:一个盘子用尽各种方法只能装4个果 ...

  6. 利用linux的mtrace命令定位内存泄露(Memory Leak)

    一谈到内存泄露, 多数程序员都闻之色变. 没错, 内存泄露很容易引入, 但很难定位.  以你我的手机为例(假设不经常关机), 如果每天泄露一些内存, 那么开始的一个星期, 你会发现手机好好的, 当内存 ...

  7. ios 内存深度优化_iOS性能优化之内存(memory)优化

    近期在工作中,对APP进行了内存占用优化,减少了不少内存占用,在此将经验进行总结和分享,也欢迎大家进行交流. 在优化的过程中,主要使用了以下工具: Instruments和Allocations 这个 ...

  8. python内存泄露memory leak排查记录

    问题描述 A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的. 针对每个集群,主线程会创建一个子线程,并由子线程去检测.子线程会频繁的创建和销毁. 上线以后,由于经常会有 ...

  9. Android 性能优化之内存泄漏检测以及内存优化(上)

    在 Java 中,内存的分配是由程序完成的,而内存的释放则是由 Garbage Collecation(GC) 完成的,Java/Android 程序员不用像 C/C++ 程序员一样手动调用相关函数来 ...

最新文章

  1. 实现对学生信息的增加操作
  2. 树上动态插点 ---- F. Imbalance Value of a Tree(树上动态插点 + 并查集)
  3. CG CTF WEB AAencode
  4. linux tomcat java heap space_Linux下tomcat JVM内存设置
  5. 习题11-7 奇数值结点链表 (20 分) -链表
  6. python字典输入学生信息_如何用Python将XML中的所有信息输入字典
  7. 操作12864(ST7920控制器)
  8. Timestream开发最佳实践
  9. awk 使用正则表达式_如何在awk中使用正则表达式
  10. 杭电1597 find the nth digit
  11. ASP.NET Core WebAPI控制器返回类型的最佳选项
  12. VMware ESXi 虚拟机硬盘格式:精简置备、厚置备延迟置零、厚置备置零
  13. WSL之Emacs中文乱码解决
  14. 【物联网毕设基础】实时时钟芯片 DS1302 介绍
  15. 亲测有效,推荐4款好用的录屏软件
  16. 个人选择黑苹果配置--中端机
  17. 定义一个基类BAse,有两个公有成员函数fn1,fn2;私有派生出derived类,如何通过derived类的对象调用基类的函数fn1;
  18. CPU和CPU寄存器和CPU缓存和CPU内存管理器、RAM、hard disk。以及堆栈、内存映射。
  19. Qt qlabel怎样实现透明
  20. Linux查看tomcat是否启动,查看tomcat监听端口

热门文章

  1. PDF怎么转换成长图
  2. java entries_Java ZipFile entries()用法及代码示例
  3. windows驱动开发教程 滴水_滴水编程达人全套
  4. 70.爬楼梯(简单)
  5. LeetCode题解(0695):岛屿的最大面积(Python)
  6. 设计点类 Point,能够表示平面当中的任意点
  7. 关于hive当中的double的数据类型
  8. 无线破解攻击工具使用详解
  9. js相册图片抖动放大展示效果
  10. html5的技术串讲,Web前端开发职业标准串讲(初级).pdf