问题标签 [eclipse-memory-analyzer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
668 浏览

java - 我的应用程序在我的设备上占用 250mb 内存。当我进行堆转储并对其进行分析时。它说堆大小约为 7mb

是否有另一个正在使用的内存没有显示在堆转储中?我在 Eclipse 上使用内存分析器。首先,我使用 DDMS 和内存分析器选择转储堆。它只显示堆的大小为 7mb,直方图基本上告诉我一切都很好。但是,我已经在我的设备上下载了几个内存监控应用程序,他们都说我的应用程序占用了 250mb,而且还在不断攀升。

我还能如何尝试找出为什么它占用这么多内存?

在此处输入图像描述

在此处输入图像描述

0 投票
0 回答
277 浏览

android - 如何查看从内存转储中获取的位图?

背景

android 应用程序通常为它们提供少量的堆内存。这就是为什么你总是需要避免拿着大的物体。

由于我正在开发的应用程序在某些情况下可能会导致 OOM,我认为我应该检查导致内存不足的原因。

我使用了MAT 插件,我发现该应用程序有 3 个位图,每个位图占用 3.5MB。

问题

该应用程序已经使用了多个位图,但它们要小得多(每个不到 1MB)。

事实上,我什至设置了断点以确保我创建的每个位图都不会占用太多内存,但什么也没找到。

我也看过一些关于这个问题的谷歌 IO 视频(比如这个)。似乎为了查看哪个类引用了该对象,您单击该对象并选择“GC 根路径”=>“排除弱引用”。

我试过的

您可以在支配树中看到哪些位图占用最多(查看“保留堆”)。

为了导出数据,您可以选择字节数组,然后“复制”=>“将值保存到文件”。

然而,就像其他人在这篇文章中尝试过的一样,我一直坚持显示位图本身(需要知道它的格式、宽度和高度)。另外,使用 GIMP 来完成这项任务可能会很烦人。

问题

如何在 Eclipse 中查看位图(图像本身)?

0 投票
1 回答
67 浏览

java - 从 mat 消息映射原始内存泄漏

我可以使用 MAT 并且收到消息,显示我的包名称带有浅层和保留堆。由此,我如何定位导致内存泄漏的代码行?任何机构,请帮助我,在此先感谢。下面是转储 HPROF 文件消息 在此处输入图像描述

0 投票
2 回答
404 浏览

android - 如何释放 HttpURLConnection 字节?

我正在开发一个发送大量 http 请求(HttpURLConnection)的安卓应用程序。一切正常,但我认为我的对象没有被释放。我这么说是因为当我查看 MAT(Eclipse 内存分析器)时,它说我保留了很多字节 []。我查看了 MAT 上的字节,它们是我在 HttpURLConnection 方法中收到的字节。下面是我发送http请求的代码。我还能做些什么来释放我的对象吗?

0 投票
2 回答
1656 浏览

java - 使用内存分析器在 Java heapdump 中查找打开的文件

我有一个在内存分析器中打开的 java heapdump。内存分析器(mat)中有什么方法可以查询打开的文件句柄吗?我想确切地确定哪个类打开了文件并持有对该文件的活动引用。

0 投票
1 回答
3749 浏览

java - 如何在堆文件中找到局部变量

我有一个 j2ee 应用程序并通过 visualVM 对其进行监控。

可以说我有这样的方法:

从线程水龙头,我可以看到我的一些线程卡在上述方法中。所以我生成了一个堆转储文件来弄清楚 s 和 sb 包含什么。

但我该怎么做呢?我正在使用 Eclipse 内存分析器。

0 投票
2 回答
1753 浏览

java - Does Java VisualVM gives correct Heap Size of heap dump (.hprof file)

I am analyzing a OutOfMemory issue. I got a dump of 800 MB (.hprof file) when i open it in MAT it shows heap size 53.2 MB as below

enter image description here

Same dump i opened in Java VisualVM and I see Heap size around 769 MB

I read one article which shows MAT skips unreachable objects so doesnt report exact heap size.

What does Total Bytes of VisulaVM shows here : Heap Size or (Heap + Non Heap size) or anything else?

0 投票
1 回答
8001 浏览

java - 对(可能的)Android 内存泄漏一无所知

即使在确保我的所有位图都正确缩放等之后,我也遇到了一些烦人OutOfMemoryErrors的问题。事实上,这个问题似乎根本与位图无关,但我可能错了。

出于测试和错误隔离的目的,我一直在使用导航抽屉(不使用后退按钮)在两个活动(我们称之为 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_FRONT意图标志,那么内存只会增加,直到所有不同的活动都被实例化(一次)。对此事有用:当内存不足时,Android 不会从堆栈中杀死活动

0 投票
3 回答
1360 浏览

java - 使用 Eclipse MAT 找不到由数组对象创建的内存泄漏

我正在旧 Java 应用程序中使用 MAT(Analyzing Heap Dump)调试 OutOfMemory 问题。MAT 显示 RMI 线程创建了 My Business Object(BO) 的 Array(BO[150K+]),它有 150k+ 个实例,它消耗大约 358 MB(Xmx 是 512 MB)。这是一种内存泄漏情况。

在所有转储(在服务器崩溃后创建)中,我注意到一个更有趣的部分,Array Object 中的实例数量是相同的。

我无法理解如何找出这个 Array Object ,这个数组对象是在哪个类中创建的。MAT 中是否有任何此类直接/间接功能?

请建议在 visualVM 或其他工具中是否有任何此类选项。或者一些我可以在代码库上运行的内存分析器。

0 投票
3 回答
946 浏览

java - 在 Set 的堆转储中计数引用目标

我目前正在查看这个愚蠢的小测试类的堆转储(在main方法的最后获取):

现在我试图弄清楚如何计算对特定类的引用objects。如果这是一个 SQL 数据库,那就很简单了:

结果:

经过一番研究,我想我可以构建一个Eclipse MAT OQL查询,它为我提供了所涉及的类:

唉,这不包括他们的计数,OQL 似乎不支持GROUP BY子句。任何想法如何获取此信息?

编辑添加:实际上,添加到的对象Set(显然也不是Set实现本身)都不受我的控制。很抱歉,修改RefObj1RefObj2不允许。

Edit2:我发现了这个关于在 jvisualvm 中使用 OQL 的相关问题,但事实证明OQL实际上是在堆转储中释放的 Javascript。我也会接受这样的事情。但是玩弄它并没有对我产生结果。如果情况发生变化,我会更新问题。