leakcanary

腾讯开源 iOS 内存监控组件和OOM检测工具

谁说胖子不能爱 提交于 2021-02-20 19:57:20
自阿里巴巴开源Android检测内存泄露工具 LeakCanary 后,腾讯开源了一个在iOS 内存监控组件和一个OOM检测工具。 MLeaksFinder MLeaksFinder 是腾讯开源的 iOS 平台的自动内存泄漏检测工具,引进 MLeaksFinder 后,就可以在日常的开发,调试业务逻辑的过程中自动地发现并警告内存泄漏。开发者无需打开 instrument 等工具,也无需为了找内存泄漏而去跑额外的流程。并且,由于开发者是在修改代码之后一跑业务逻辑就能发现内存泄漏的,这使得开发者能很快地意识到是哪里的代码写得问题。这种及时的内存泄漏的发现在很大的程度上降低了修复内存泄漏的成本。 特性: 自动检测内存泄漏和释放不及时的场景 构建泄漏对象相对于 ViewContrller 的引用链以帮助开发者定位问题 不侵入业务逻辑,引入即生效,无需修改任何代码或引入头文件 用法 MLeaksFinder 可自动查找 UIView 和 UIViewController 对象中的泄漏。当发生泄漏时,它会在 View-ViewController 堆栈中显示泄漏对象预警。 Memory Leak ( MyTableViewController , UITableView, UITableViewWrapperView, MyTableViewCell ) OOMDetector

内存泄漏优化

柔情痞子 提交于 2021-02-14 23:15:13
目录介绍: 01.什么是内存泄漏 02.内存泄漏造成什么影响 03.内存泄漏检测的工具有哪些 04.关于Leakcanary使用介绍 05.错误使用单例造成的内存泄漏 06.Handler使用不当造成内存泄漏 07.Thread未关闭造成内容泄漏 08.错误使用静态变量导致引用后无法销毁 09.AsyncTask造成的内存泄漏 10.非静态内部类创建静态实例造成内存泄漏 11.不需要用的监听未移除会发生内存泄露 12.资源未关闭造成的内存泄漏 13.广播注册之后没有被销毁 14.错误使用context上下文引起内存泄漏 15.静态集合使用不当导致的内存泄漏 16.动画资源未释放导致内存泄漏 17.系统bug之InputMethodManager导致内存泄漏 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢! 链接地址: https://github.com/yangchong211/YCBlogs 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微

Android内存优化10 内存泄漏常见情况1 静态泄漏

此生再无相见时 提交于 2021-02-14 21:56:15
1,内存泄漏到本质是该释放的对象被持久化的对象引用了,造成持久化的常见情况有1,静态持久化 2,线程持久化 线程持久化 因为存活的线程是有dvk虚拟久直接持有,所以存活的线程都是持久化的 内存泄漏1 :静态Activities(static Activities) 代码如下: MainActivity. Java public class MainActivity extends AppCompatActivity { private static MainActivity activity; TextView saButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saButton = (TextView) findViewById(R.id.text); saButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { setStaticActivity(); nextActivity(); } }); }

LeakCanary (2.0) blocking the main thread causes my instrumentation tests to fail

試著忘記壹切 提交于 2021-01-29 13:36:57
问题 when I run my instrumentation tests against the debug version of my app, leak canary will block the UI thread and cause the instrumentation test to fail. I had to revert to the old version. Is there any way to avoid the leakcanary UI or companion app (not sure what is blocking the UI thread) from running, while running the instrumentation tests? Thanks 回答1: See the doc: https://square.github.io/leakcanary/recipes/#running-leakcanary-in-instrumentation-tests LeakCanary automatically disables

Memory leak in the empty Activity

北城余情 提交于 2021-01-27 12:45:56
问题 I recently decided to use leakcanary in my projects, So I created a project with an empty Activity just for test, When I run the app (just after project creation with no logic code or views) I got memory leak log from this library: 07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * com.example.leaktest.MainActivity has leaked: 07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * GC ROOT static android.app.ActivityThread.sCurrentActivityThread 07-20 04:32:36.742

Android内存优化(四)LeakCanary使用详解

雨燕双飞 提交于 2021-01-10 03:53:48
LeakCanary是检测App内存泄露的工具, 内存泄露是Android开发中常见的问题, 使用程序的稳定性下降. LeakCanary 的机制如下: RefWatcher.watch() 会以监控对象来创建一个 KeyedWeakReference 弱引用对象 在 AndroidWatchExecutor 的后台线程里,来检查弱引用已经被清除了,如果没被清除,则执行一次 GC 如果弱引用对象仍然没有被清除,说明内存泄漏了,系统就导出 hprof 文件,保存在 app 的文件系统目录下 HeapAnalyzerService 启动一个单独的进程,使用 HeapAnalyzer 来分析 hprof 文件。它使用另外一个开源库 HAHA。 HeapAnalyzer 通过查找 KeyedWeakReference 弱引用对象来查找内在泄漏 HeapAnalyzer 计算 KeyedWeakReference 所引用对象的最短强引用路径,来分析内存泄漏,并且构建出对象引用链出来。 内存泄漏信息送回给 DisplayLeakService ,它是运行在 app 进程里的一个服务。然后在设备通知栏显示内存泄漏信息。   监测机制利用了Java的WeakReference和ReferenceQueue,通过将Activity(对象)包装到WeakReference中

Android内存优化

青春壹個敷衍的年華 提交于 2020-11-05 10:43:51
Android内存优化(六)LeakCanary使用详解 https://cloud.tencent.com/developer/article/1034262 install方法会返回RefWatcher用来监控对象,LeakApplication中还要提供getRefWatcher静态方法来返回全局RefWatcher。最后为了举例,我们在一段存在内存泄漏的代码中引入LeakCanary监控,如下所示。 LeakCanary leakcanary-android-no-op 07 LeakCanary.install方法会返回RefWatcher用来监控对象,LeakApplication中还要提供getRefWatcher静态方法来返回全局RefWatcher。最后为了举例,我们在一段存在内存泄漏的代码中引入LeakCanary监控,如下所示。 RefWatcher LeakApplication.23(watch) 中还要提供getRefWatcher静态方法来返回全局RefWatcher。最后为了举例,我们在一段存在内存泄漏的 MainActivity存在内存泄漏,原因就是非静态内部类LeakThread持有外部类MainActivity的引用,LeakThread中做了耗时操作,导致MainActivity无法被释放。关于内存泄漏可以查看Android内存优化(三