Android LeakCanary(检测内存泄漏插件) 最新版

  leakcanary是检件 一款功能强大的Android内存泄露分析工具 ,在使用手机时间长以后,测内存泄就有可能造成系统的漏插内存泄露 ,就像是最新电脑的磁盘使用时间长了就会造成扇区侵吞 ,需要铺开修复才能得到更多的检件 存储空间 ,对于手机的测内存泄存储系统也是一样的,如果您想要分析手机中的漏插存储数据是否存在泄漏,可以下载这款软件扶植您从Android内部分析相关数据 ,最新从而及早筹备已经裸露泄漏的检件 内存,晋升手机存储设备的测内存泄使用寿命,需要的漏插挚友可以下载试试!

软件功能

  碰见所有的最新 com.squareup.leakcanary.KeyedWeakReference 实例。

  你可以改变筹备落成的检件 默认行为,将 leak trace 和 heap dump 上传到你的测内存泄服务器以便统计分析 。

  你需要在 MAT 或者 YourKit 之类的漏插内存分析工具中反复查校验 ,找到那些原本该被回收掉的对象。

  检查 key 字段

  Find the KeyedWeakReference that has a key field equal to the reference key reported by LeakCanary.

  找到 key 和 和 logcat 输出的 key 值一样的 KeyedWeakReference。

  referent 字段对应的就是泄露的对象 。

  剩下的  ,就是动手修复了。最好是检查到 GC root 的最短强引用路径起始。

  HeapAnalyzer 计算 到 GC roots 的最短强引用路径,并确定是否是泄露  。如果是的话,建立导致泄露的引用链。

  保存了 7 个 dump 文件和 leak trace。你可以在你的 APP 中,定义R.integer.__leak_canary_max_stored_leaks 来覆盖类库的默认值。

软件特色

  1. 虚拟机栈(栈帧中的本地变量表)中的引用的对象 。

  2. 计划区中的类静态属性引用的对象。

  3. 计划区中的常量引用的对象 。

  4. 本地计划栈中JNI(即一般会谈的Native计划)的引用的对象 。

使用计划

  当 someObjNeedGced 还在内存中时,就会在 logcat 里校验到内存泄漏的提示 。

  测试你的 App 时 ,如果裸露了内存泄漏,状态栏上会有通知告诉你 。logcat 上也会有相应的 log 通知你。

  使用MAT或YourKit内存检测工具检测内存的变化,并找出哪个对象应该被垃圾回收;

  然後校验校验heapDumper.dumpHeap()怎么裸露hprof文件 ,然后再校验heapdumpListener.analyze流程

  AndroidHeapDumper.java

  然后如果需要就显示在传递到APP进程中的DisplayLeakService,并以通知的形式展示出来,代码如下

  gc也是可以回收他们.根集的计划精度很高,但是效率低.计数器法精度低(无法筹备循环引用) ,但是执行效率高.

  只要垃圾回收器没有回收它 ,该对象就可以被程序使用 。软引用可用来实现内存敏感的高速缓存。

  它在主线程执行, 但是有一个delay 时间(默认5000 milisecs) , 因为对于application 来会谈 ,执行destroy activity只是把必要资源回收,activity 对象不一定会马上被 gc回收 。

使用会谈明

  关于代码检查

  的IntelliJ平台提供专为静态代码分析工具(所谓的代码检查) ,扶植您维护和清理你的代码不执行它。有关更多信息,请参考IntelliJ IDEA Web扶植代码检查。在IntelliJ IDEA你会发现一组内置的检查,是由他们的目标和意义的组合 。

  你可以通过使用IntelliJ IDEA接口创建自定义的检查(请参阅创建自定义检查)。或者 ,您可以开发插件来实现自定义检查 。

  使用的技术

  样品的comparing_references_inspection插件会谈明以下技术的使用:

  如何分析PSI树 。

  如何找到一个在PSI树利率java令牌 。

  如何检查java代码使用basejavalocalinspectiontool类在IntelliJ IDEA编辑器。

  如何创建一个JUnit测试该插件使用ideatestfixturefactory类。

常见尴尬

  (1). 如何导出 hprof 文件

  可以参阅 AndroidHeapDumper.java 的代码。

  (2). 如何分析 hprof 文件

  这是个比较大的话题,感兴趣的可以移步另外一个开源库 HAHA ,它的祖先是 MAT。

  (3). 如何使用 HandlerThread

  可以参阅 AndroidWatchExecutor.java的代码,特别是关于 Handler, Loop 的使用 。

  如何判断某个变量是否被已经被 GC 回收

  可以参阅 RefWatcher.java 的 ensureGone() 函数 。最主要是利用WeakReference和 ReferenceQueue 机制 。简易地会谈 ,就是当弱引用 WeakReference 所引用的对象被回收后 ,这个 WeakReference 对象就会被增补到ReferenceQueue 队列里,我们可以通过其 poll() 计划得到到这个被回收的对象的 WeakReference 实例 ,通过判断其是否为 null 进而知道需要监控的对象是否被回收了。

渝ICP备2025076537号-22