标签: eclipse-memory-analyzer

MAT(Eclipse Memory Analyzer) - 如何从内存转储中查看位图

我在Eclipse Memory Analyzer(也称为MAT)的帮助下分析了我的Android应用程序的内存使用情况.有时我可以找到奇怪的android.graphics.Bitmap类实例,利用大部分堆.问题是我找不到这个位图的来源,没有文件名,没有resourceID,什么都没有.我能找到的关于位图的所有信息如下: bitmap_info

mBuffer我假设有一个带有图像像素阵列的场.但它采用的是一些内部Android格式,而不是PNG.

问题:如何从内存转储中查看此位图表示的图像?

android memory-dump bitmap hprof eclipse-memory-analyzer

48
推荐指数
2
解决办法
1万
查看次数

如何在eclipse中安装MAT

无法弄清楚如何在Eclipse中安装MAT(内存分析器工具).需要这个程序来分析我的Android应用程序漏洞的堆.

觉得愚蠢,抱歉;-(

准确的步骤是什么?

我该怎么做Eclipse?选择Android SDK管理器或转到help => install new software =>然后在字段中输入url字符串(http://download.eclipse.org/mat/1.1/update-site/)?

尝试过两者 - 现在似乎没什么用.

非常感谢您的描述:-)

eclipse-plugin eclipse-memory-analyzer

37
推荐指数
2
解决办法
4万
查看次数

关于(可能的)Android内存泄漏无能为力

OutOfMemoryErrors即使在确保我的所有位图都已正确缩放之后,我也一直面临着一些烦人的问题.事实上,这个问题似乎与Bitmaps根本没有关系,但我可能错了.

出于测试和错误隔离的目的,我一直在使用导航抽屉(不使用后退按钮)在两个活动之间切换(让我们称之为Main和List).我可以在DDMS中看到每次返回时分配的内存增加大约180 KB.

我已完成内存转储并使用eclipse MAT分析3个不同的时间点:

屏蔽1

画面2

屏幕3

我怀疑内存泄漏,但我无法找到原因.根据内存转储,它看起来像是"剩余"并且java.lang.FinalizerReference不断增加.这个问题的用户在FinalizerReferences他的内存转储中也有很多,但答案还不是很清楚.

我在最后一个时间点提出的泄漏嫌疑人报告并不是很有帮助,因为它怀疑android.content.res.Resources并且android.graphics.Bitmap随着时间的推移似乎没有增长:

Screen3LeakReport

在其中一份报告中(遗憾的是,这里没有),我看到13个被android.widget.ListView指出为潜在泄密嫌疑人的实例.

这些内存增加发生在活动之间的任何转换(不仅仅是本例中使用的Main和List).

如何找到(非显而易见的?)内存泄漏?我一直在摸不着头脑,所以任何帮助和提示都会很棒.

编辑:

  • 位图(@ OrhanC1):我已经评论Bitmap了上面提到的两个活动中的任何实例,内存仍在增加.内存转储仍显示一些位图,但我相信它们与资源有关,而不是我分配的实际位图.

  • 关于自定义字体(@erakitin):我正在使用它们,但我使用单例Typeface在我的Application上下文(public class MyApp extends Application)中保留每个字体的单个实例.我已经尝试评论上面提到的两个活动中对字体的任何引用,内存仍然增加.

  • 我不认为我正在泄漏Context(@DigCamara):我没有在这两个活动中持有任何静态引用,我使用Application上下文而不是Activity在适配器中的's.如果我保持相同Activity并进行一些屏幕旋转,则内存不会增加.

  • 基于@ NickT的评论:我可以看到我有两个活动的很多实例.这些内存增加是否只是后端堆栈活动数量增加而不是内存泄漏的结果(虽然操作系统处理的内容显然没有)?如果我使用FLAG_ACTIVITY_REORDER_TO_FRONTintent标志,那么内存只会增加,直到所有不同的活动都被实例化(一次).这个问题很有用:当内存不足时,Android不会从堆栈中查杀活动.

java android memory-leaks bitmap eclipse-memory-analyzer

24
推荐指数
1
解决办法
7919
查看次数

19
推荐指数
1
解决办法
5280
查看次数

如何在Mac OS上运行Eclipse内存分析器?

我在笔记本电脑上运行Eclipse内存分析器时遇到一些问题.

刚刚下载(从地方)并执行应用程序时会发生这种情况:

在此输入图像描述

在此输入图像描述

我无法弄清楚问题的原因是什么.有人能帮我吗???

java eclipse macos eclipse-memory-analyzer

17
推荐指数
3
解决办法
8207
查看次数

使用1 Mb堆的奇怪位图

出于好奇,我刚刚使用Eclipse Memory Analyzer测试了我的Android应用程序内存泄漏.

我遇到了一个奇怪的Bitmap,大小为512 x 512像素,占用了大约1兆字节的设备堆内存.

在此输入图像描述

我检查了我的drawables文件夹,找不到那个大小的位图(512 x 512).

我开始谷歌搜索并遇到了这个问题,用户解释了如何在Memory Analyzer中获取"内存泄漏"参考后面的实际图像:

MAT(Eclipse Memory Analyzer) - 如何从内存转储中查看位图

我按照教程并在GIMP的帮助下,提取了以下图片:

在此输入图像描述

所以我的问题是:

  • 那是什么?
  • 它在我的应用程序堆中做了什么?
  • 我怎么摆脱它?
  • 有没有其他人在他的堆中有相同的位图?

笔记:

  • 在我的drawables文件夹中没有看起来像这样的Bitmap
  • 我的应用程序使用的最大位图是140 x 140像素
  • 我有一种感觉,这个Bitmap不知何故来自系统
  • 应用程序启动后,Bitmap就在堆中 - 没有任何用户交互
  • 我正在调试HTC One S,Android 4.1 Cyanogen Mod(屏幕540 x 960)
  • 我没有使用外部库

更新:

Selvin的建议和我的个人感觉的帮助下,这可能是一个系统问题,我测试了我的另外两个应用程序.

我测试的两个应用程序也在Memory Analyzer中显示了相同的Bitmap,消耗的字节数完全相同:

在此输入图像描述

此外,我能够发现:

Bitmap的源始终与应用程序的LAUNCHER活动相关联.

那该怎么办呢?有办法摆脱它吗?

由于我在我的应用程序中执行内存密集型操作,因此我希望尽可能多地使用堆.

heap android memory-management bitmap eclipse-memory-analyzer

14
推荐指数
1
解决办法
1443
查看次数

以编程方式从命令行分析HPROF内存转储文件

我正在调查使用Eclipse的Memory Analyzer(MAT)分析HPROF文件.统治者树,报告和OQL界面看起来非常有用.但所有这一切都必须通过MAT软件手动完成.

是否有命令行界面,因此我可以通过编程方式解析HPROF并自动生成自定义报告.

这对于集成此测试基础结构以进行自动内存分析非常有用.

顺便说一句,堆大小将在10-60MB之间.

java android hprof eclipse-memory-analyzer

12
推荐指数
1
解决办法
9911
查看次数

有没有办法分析截断的Java堆转储(hprof文件)?

在我的工作中,我们遇到了难以重现的OOM问题.或者,更准确地说,它很容易在一个系统上重现,使得该系统无法使用,但在相同的输入下难以在其他任何地方重现.

应用程序使用服务包装器作为服务运行.我们确实设法更改配置以启动它,并选择在OOM上输出堆转储文件,但不幸的是,它们被截断,很可能是由于服务包装器超时并在写入文件时终止进程.这很明显,因为最大内存设置为1GB,而hprof文件小到700MB,这对于OOM上的整个堆来说太小了.

需要花费大量资金来进一步配置包装器以使java进程有更长的时间来写出堆,但我们正在使用这两个选项来实现这一点:

wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600
Run Code Online (Sandbox Code Playgroud)

问题是,我能用截断的hprof文件做些什么有用吗?Eclipse MAT扼杀它们.Jhat似乎加载了它们,但随后只显示了3个大小为0的Java.Object实例.我试过YourKit,它无法写出它的oids文件.

在我看来,这些文件应该包含一些有用的,可访问的信息.有没有一个工具可以读取那里有什么?

感谢您的时间!

java jhat yourkit hprof eclipse-memory-analyzer

11
推荐指数
1
解决办法
1083
查看次数

eclipse中保留堆的单位?

当我在Eclipse-Helios中使用Memory Analyzer时,我在'保留堆'列中获得1294736的数值,这个数值的单位是多少?是字节还是字节?

浅堆值的相同查询.

eclipse memory-leaks memory-management eclipse-memory-analyzer

10
推荐指数
1
解决办法
2231
查看次数

'heapdump.xxx.phd'.不是HPROF堆转储(java.io.IOException)不是HPROF堆转储

Eclipse Memory Analyzer文档说它可以打开IBM可移植堆转储文件(*.phd):

http://help.eclipse.org/luna/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html

但是,当我尝试打开一个时,我得到并且错误:

'heapdump.xxx.phd'. Check the error log for further details.
Not a HPROF heap dump (java.io.IOException)
Not a HPROF heap dump
Run Code Online (Sandbox Code Playgroud)

我尝试了两个菜单选项(文件>打开堆转储)和(文件>打开文件)

eclipse-memory-analyzer

10
推荐指数
1
解决办法
2万
查看次数