标签: eclipse-memory-analyzer

如何从内存转储中找出预加载的系统drawable(位图)的ID或名称

我正在分析我们的应用程序的内存使用情况,并发现奇怪Drawables,它不断"吃"几兆字节的堆.以下是来自MAT的一些截图:

支配树 支配树有2个相当大的位图

path_to_gc_roots 以上位图之一的GC根路径

这个位图总是出现在我的手机(三星Galaxy Nexus,OS 4.1.1)的堆转储中,无论我使用我们的应用多长时间或多么密集.

我已经尝试使用MAT搜索这个位图的来源 - 没有运气.所有有用的信息,我能找到的就是widthheight位图,它的512×512两种: bitmap_info

但我们的应用程序没有任何单个512x512 drawables.我认为这是一些"系统"可绘制的.但到底是什么?为什么他们这么大?

我也查看了android.content.res.Resources类的源代码,搜索sPreloadedDrawables字段的用法- 也没有运气.我从内存转储获取的所有内容都key来自sPreloadedDrawables数组,但我无法从此密钥中确定文件名或资源ID.

所以,我的问题是:

  • 如何确定此位图的名称或ID

  • 这个巨大的位图是如何加载的以及为什么它们总是留在内存中

更新:

我找到了一种从内存转储中查看此位图的方法.这两个位图是一个简单的渐变,一个是黑色,另一个是白色.我想这是对资源Holo.LightHolo.DarkICS主题.但我的第二个问题仍然是实际的:为什么这个位图总是停留在内存中?有没有办法上传或回收它们?

android memory-management bitmap eclipse-memory-analyzer android-resources

5
推荐指数
1
解决办法
2327
查看次数

从非二进制格式转换为Java内存转储的二进制格式

使用工具jmap,可以创建两种格式的内存转储:

Binary format: jmap -dump:format=b,file=binary_dump.dat <pid> 
Run Code Online (Sandbox Code Playgroud)

要么

Other format: jmap -dump:file=other_format_dump.dat <pid>
Run Code Online (Sandbox Code Playgroud)

我读过很多地方,例如jhat和jvisualvm等工具只能读取二进制格式。

所以:

  1. 有没有可以读取其他格式的工具?
  2. 有没有可以将其他格式转换为二进制格式的工具?

我有一个使用其他格式创建的内存转储文件,需要能够对其进行检查,最好使用Eclipse Memory Analyzer Tool进行检查。

java jmap eclipse-memory-analyzer

5
推荐指数
0
解决办法
223
查看次数

Eclipse Memory Analyzer在启动后没有响应

我从官方网站下载了一个独立的Eclipse Memory Analyzer,打算用它来打开一个hprof文件来做一些分析工作.但是,应用程序似乎在启动后卡住了.我无能为力,只能拖动窗口,如下图所示:在此输入图像描述

我正在使用的操作系统是macOS Sierra,mat版本是1.6.1,这里是MemoryAnalyzer.ini:

  -startup
    ../Eclipse/plugins/.    org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
-data
/Users/XXX/eclipse_data
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.300.v20150602-1417
-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home/bin/java
-vmargs
-Xmx2g
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread
Run Code Online (Sandbox Code Playgroud)

谁能给我一些建议?非常感谢.

java eclipse-plugin eclipse-memory-analyzer

5
推荐指数
1
解决办法
1210
查看次数

Eclipse MAT 解析 11GB 堆转储 - 内存不足。无法解析堆转储

我试图使用 Eclipse MAT 解析 11GB 堆转储,但出现以下错误

  An internal error occurred during: "Parsing heap dump" 
Run Code Online (Sandbox Code Playgroud)

我认为 MAT 无法解析如此巨大的堆转储。我阅读了一些帖子并将 VM 配置增加到转储大小的 80% 以上。以下是我的虚拟机配置

      -vmargs -Xms8192m -Xmx10240m 
Run Code Online (Sandbox Code Playgroud)

我仍然无法加载转储。我尝试使用 ParseHeapDump.bat 没有任何变化......

eclipse eclipse-memory-analyzer

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

在Eclipse Memory Analyzer上安装DTJF以读取.phd文件

我有Eclipse Memory Analyzer v1.3.1,需要分析一些.phd堆转储。

根据这个问题,有必要在Eclipse Memory Analyzer上安装DTJF。

问题中的此链接说:内存分析器还可以从IBM系统转储和可移植堆转储(PHD)文件中读取与内存有关的信息。为此,只需将IBM DTFJ功能部件安装到Memory Analyzer版本0.8或更高版本中。请遵循IBM DTFJ功能部件安装说明。如果成功安装了DTFJ功能,则“文件”“打开堆转储”应为文件类型提供以下选项……

当我单击“安装”部分中的链接时,到达此位置,似乎是一个文件列表,其中包含一些.jar文件和1个.xml文件,但没有安装说明。

有人知道我应该做什么吗?我没有“正确”安装Eclipse Memory Analyzer v1.3.1-我只是下载了所有文件,并将它们放在C:\ Users(我的用户名)\ Documents \ Software \ MemoryAnalyzer-1.3.1.20140107-win32.win32.x86 \ mat下并通常通过双击文件MemoryAnalyzer.exe来运行它。在安装DTFJ之前我需要做些什么吗?

heap-dump eclipse-memory-analyzer

4
推荐指数
1
解决办法
5560
查看次数

eclipse内存分析器无法打开

我安装了eclipse内存分析器(mat)并遵循官方网站上的教程,但.hprof文件在标准文本编辑器中打开,而不是像我预期的那样.

我可能遗漏了一些基本的东西,但我找不到如何明确启动程序.或者如何配置.hprof文件以在地图中打开

eclipse eclipse-memory-analyzer

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

有没有办法在mat中使用OQL获取无法访问的对象?

我可以使用 OQL 查询 in mat 的所有实例com.google.common.cache.LocalCache$StrongAccessWriteEntry

SELECT * FROM com.google.common.cache.LocalCache$StrongAccessWriteEntry
Run Code Online (Sandbox Code Playgroud)

Keep unreachable objects我已经在垫子上打开了。因此结果包含可到达和不可到达的对象。现在我想要获取所有无法访问的com.google.common.cache.LocalCache$StrongAccessWriteEntry instances(又名无 gc 根),如下所示:

SELECT * FROM com.google.common.cache.LocalCache$StrongAccessWriteEntry WHERE unreachable=true
Run Code Online (Sandbox Code Playgroud)

我可以使用 OQL 来完成吗?

java jvm oql eclipse-memory-analyzer

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

更改Eclipse运行时环境

必须提供Java RunTime Environment(JRE)或Java Development Kit(JDK)才能运行MemoryAnalyzer.搜索以下位置后未找到Java虚拟机:C:\ Documents and Settings ......

我的问题是如何更改JRE或JDK的路径?

注意我的日食工作完全正常.

java eclipse android eclipse-memory-analyzer

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

Android 堆转储转换为 J2SE:hprof-conv:找不到命令

按照Patrick Dubroy 的指南,我尝试将堆转储转换为 J2SE HPROF,但无法执行hprof-conv. 这很奇怪,因为它位于文件夹中。

在此输入图像描述

如何解决这个问题?

java android memory-management hprof eclipse-memory-analyzer

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