StrictMode能很好地检测android中的内存泄漏吗?

时间:2016-10-19 16:17:08

标签: java android memory-leaks

它们是此stackoverflow问题中提到的各种方法:How can I determine if my android app has memory leak?

如果我们依赖工具,StrictMode是否适合检测android中的内存泄漏? StrictMode

public void onCreate() {
     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // or .detectAll() for all detectable problems
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     }
     super.onCreate();
 }

1 个答案:

答案 0 :(得分:0)

StrictMode文档没有提及有关内存的任何内容,因此它可能没有。该文档描述了针对磁盘读/写,网络访问等的一些(非绝对)保护。提到的唯一内存是闪存,它与RAMemory不同。

此外,自动检测内存泄漏是一个难题。一个对象挂起,因为该对象具有从GC Root开始的指向自身的路径(例如:从线程堆栈开始的指针)。本文很好地解决了这个问题(http://www.w3resource.com/java-tutorial/garbage-collection-in-java.php)。垃圾收集器不知道沿着该路径的边缘是否可以安全移除。这就是你进来的地方。你引入了应用程序应该如何运行的知识,并找到不应该存在的指针/边缘。

诊断内存泄漏的最佳选择是使用有关如何诊断内存泄漏的现有文章,如How can I determine if my android app has memory leak?。您可以使用许多其他免费工具,如visualvm和jhat。祝你好运!