【问题标题】:Trying to understand Dalvikvm and memory leaks试图理解 Dalvikvm 和内存泄漏
【发布时间】:2014-05-05 13:19:33
【问题描述】:

我正在努力寻找内存泄漏。我想第一步是通过查看 dalvikvm 来查看我是否有一个,但我并不真正了解它是好是坏。这是我的 dalvikvm 日志的快照:

有人能谈谈上面看到的内容吗?什么是红旗?什么是正常的?

此外,我已经为 eclipse 安装了 MAT,虽然有很多关于使用 MAT 查找内存链接的教程链接,但似乎没有一个真正解释他们如何找到泄漏

任何人都可以指向 MAT 的详细教程。下面是我的 MAT 泄漏嫌疑人报告中的一些屏幕截图。我不知道该怎么做。如果有人可以通过屏幕截图告诉我,将不胜感激。

!

嫌疑犯 2 支配树

【问题讨论】:

  • 您为什么要首先寻找泄漏?您对堆分配和垃圾回收的熟悉程度如何?
  • 我曾经遇到过内存不足的错误...从那以后就没有发生过,但我想知道会很好
  • 有没有HotSpot JVM Gchisto等获取运行时泄露信息的工具
  • 规范的“Android 上的内存使用”问答是*.com/questions/2298208/…

标签: android memory-leaks dalvik


【解决方案1】:

作为 hprof 的结果(MAT),android 应用程序使用的最大内存是图形/位图。这是 Android 应用程序中的常见情况。 您可以使用 Android 堆配置文件来跟踪内存分配。

您可以在这里使用showmap查看Android应用程序在native或java-heap中的内存使用详情。

而查找内存泄漏的方法是使用procrank/ps查看PSS/USS趋势。 如果趋势一直在增加,则可能存在内存泄漏。 然后,您可以使用 MAT 比较 hprof 增加 java-heap 的情况。

【讨论】:

  • 你在 procrank/ps 把我弄丢了……那是什么?
  • @erik、procrankps 是 linux(在 Android eng 版本中)用于在应用级别转储 PSS/USS 的命令行。
  • 和堆转储一样吗?
  • @SamusArin 据我所知,糟糕的用户代码是导致内存泄漏的主要问题。而在 Dalvik 中,java-heap 使用 dlmalloc 来分配内存,这可能会导致更多的内存碎片;即使您调用 GC,VM 也可能不会在 Linux 中为每页 4K 修剪 java-heap。所以 android low ram page 建议我们同时分配/释放对象以获得更连续的内存,这看起来像手动的世代内存管理。
  • @erik,PSS 包含一个 linux 进程中的所有虚拟内存使用情况。不仅有dalvik-java-heap,还有malloc等很多内存信息。
最近更新 更多