首页 > 系统相关 >LeakCanary检查内存泄露

LeakCanary检查内存泄露

时间:2023-03-10 13:32:33浏览次数:28  
标签:leakcanary LeakCanary 内存 某个 onCreate 泄露


LeakCanary检测内存泄露

内存泄露

  • 内存泄露的概念

当一个对象已经不再需要却无法被GC回收,就是内存泄露

  • 内存泄露的危害
    “A small leak will sink a great ship.” - Benjamin Franklin
    千里之堤, 毁于蚁穴。 – 《韩非子·喻老》
    对于移动设备来说,运行内存想极其有限的,分配给每个app的内存也是有上限的,虽然内存泄露不是必定会造成内存溢出,但是内存泄露的多了,那么剩余可用内存就少了,在某个时候是很有可能造成app运行卡顿以及内存溢出的。
  • 内存泄露是如何造成的
    在Android中造成内存泄露的原因一般有一下几点:
  1. Activity或者Fragment使用了static成员变量
  2. 使用Handler发送延时消息
  3. 注册某个监听器对象后没有取消注册,比如广播接收者
  4. 生命周期过长的异步任务,比如异步请求网络,此时Activity退出了

LeakCanary

内存泄露的一般原因我们可能能够分析出来并会注意到,但是仍然有很多时候我们忽略掉。所以需要一些能够帮助我们检测到内存泄露的工具。而内存泄露的检测有很多工具,比如DDMS自带的Heap工具,MAT工具,但是这些工具的缺点就是使用步骤复杂,而且对内存泄露的定位没有LeakCanary精确,所以我们选择学习简单易用的LeakCanary类库。

  • 使用步骤
  • 添加依赖
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
  • 在全局Application的onCreate中初始化
private RefWatcher mRefWatcher;
@Override
public void onCreate() {
super.onCreate();
mRefWatcher = LeakCanary.install(this);
}

也可以使用RefWatcher去检查某个指定对象的泄露:

refWatcher.watch(obj);
  • 在Debug模式下,当我们有某个对象内存泄露的时候,LeakCanary会显示一个通知,点击后可以查看更加详细的泄露信息。能定位到某个View造成的内存泄露。


标签:leakcanary,LeakCanary,内存,某个,onCreate,泄露
From: https://blog.51cto.com/u_14523369/6112930

相关文章

  • PlatformIO 中添加修改 ESP32C3 的分区表解决编译内存不足问题
    ESP32C3有4M的flash,但是在PlatformIO选择esp32-c3-devkitm-1开发板的时候只默认分配了1310720byte,还有很大一部分没有使用。解决方案一:在工程文件夹中建一个.c......
  • 操作系统——内存
    3内存3.1内存的基础知识3.1.1逻辑地址和物理地址3.1.2装入的三种方式3.1.3链接的三种方式3.1.4小结3.2内存管理3.3覆盖与交换3.4连续分配管理......
  • 生产环境Java应用服务内存泄漏分析与解决
    有个生产环境CRM业务应用服务,情况有些奇怪,监控数据显示内存异常。内存使用率99.%多。通过生产监控看板发现,CRM内存超配或内存泄漏的现象,下面分析一下这个问题过程记录。服......
  • 61.动态内存和类
    程序清单12.1strngbad.h#pragmaonce//strngbad.h--有缺陷的string类定义#include<iostream>#ifndefSTRNGBAD_H_#defineSTRNGBAD_H_classStringBad{private......
  • 云音乐 Android 内存监控探索篇
    小结:1、编码不规范导致的内存异常问题:内存泄露、大对象、大图等不合理的内存使用2、简单来说内存泄露就是某些不再使用的对象被其他生命周期更长的GCRoot直接或者间......
  • cpu、内存问题排查——gperftools 性能测试工具介绍
      在阅读reids源码时发现redis在自身内存管理malloc/frees的时候使用到tcmalloc,google后发现此组件竟然出自google开源的gperftools性能分析工具集,然后发现许多大虾云......
  • 内存
    内存泄漏申请的内存,首地址丢失,无法再使用,也没有办法释放,这块内存就泄露了。例如:内存回顾 ......
  • 动态内存申请
    malloc申请(堆区空间)头文件:#include<stdlib.h>void*malloc(size_tsize)size表示申请的空间字节数函数的返回值:成功:返回值为......
  • linux检测程序运行时间和内存峰值 Python脚本
    #!/usr/bin/envpython3#-*-encoding:utf-8-*-importsubprocessasspimportsysimporttimedefget_mem(pid):c=sp.Popen(['ps','-aux'],stdout=sp......
  • 华为OD机试 ,简易内存池
    简易内存池2|华为OD机试......