问题标签 [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 回答
908 浏览

java - 如何在 Java 中的内存分析工具中找到内存泄漏的行

我有一些内存泄漏的代码。我找到了内存分析工具 (MAT),据说它是 Java 中最好的工具之一。它看起来很花哨,并为问题提供了很多细节,关于它们的信息非常多。但是,它并没有说第一件事要说或我找不到。

假设我的代码如下:

考虑一下,这样的课程还有 30-40 个,而且不是我写的。

问题是MAT告诉我有问题,char[]但它没有说明line 12434或我无法找到。有没有办法找到that line或至少classmethod命名?如果只有一条线,我会搜索这条线,但泄漏可能无处不在?

这是内存泄漏的图像: 内存泄漏

顺便说一句,我阅读了几个教程,但找不到任何关于它的内容。提前致谢,

0 投票
1 回答
526 浏览

java - Eclipse MAT 显示许多线程没有堆栈

我的代码有泄漏,并且我有一个内存转储,我正在使用很棒的 Eclipse 内存分析器工具查看它。

使用 Thread_Overview,我可以看到我有太多线程。然而,只有少数显示堆栈。其中大部分(可能是我的泄漏)显示状态为 2(已阻塞),但没有堆栈。

知道转储中没有堆栈时这意味着什么吗?也许线程已经死了,但引用仍然保存在内存中(即泄漏)?

(如果有什么不同的话,Windows 2K 上的 Java 6)

0 投票
3 回答
3096 浏览

java - java web应用程序中的内存泄漏

我有一个使用 hibernate 3.6.4 和 spring 3.2.4(mvc、tx 和安全性)并在 tomcat 7 中运行的 Web 应用程序。每次我在不重新启动 tomcat 的情况下部署我的应用程序的新版本时,然后使用的内存tomcat 增加了大约 50MB。

我创建了一些堆转储并使用 Eclipse Memory Analyser 对其进行了分析。我发现每次重新部署应用程序时,都会创建一个新的 WebappClassLoader 实例。但即使在我使用 tomcat 管理器停止应用程序之后,WebappClassLoader 仍保留在内存中并且不会被垃圾收集。因此,每次重新部署后,都会在内存中保留一个额外的 WebappClassLoader 并使用大约 50MB 的内存。

我使用 Eclipse 内存分析器来查找从 WebappClassLoader 到 GC 根的引用路径。结果,我找不到任何可以阻止 WebappClassLoaders 被垃圾收集的强引用。

在此处输入图像描述

那么,是什么让 WebappClassLoaders 保持活力呢?我还能在哪里调查以找出阻止 WebappClassLoader 进行垃圾收集的原因?

我认为可能存在阻止 GC 完成垃圾收集的阻塞 finalize() 方法。但我怎么能检查这个?

0 投票
0 回答
93 浏览

java - 了解 Eclipse 内存分析器报告

我一直在努力找出 OOM 错误的根源。

内存分析器报告说 BitmapDrawable 的某个实例占用约 16 MB,所以我想我会从那里开始。但是,我不确定如何在“byte[]”的实例中积累内存。任何有关如何解释本报告或可能出现问题的建议都将不胜感激。

Eclipse MAT heap dump分析问题疑点1

0 投票
1 回答
85 浏览

java - 当我将 int 替换为 short 时,为什么 Java 对象的大小不同超过两个字节?

我正在开发一棵红黑树并使用 Eclipse Memory Analyzer Tool 来测量其节点占用的空间。

我注意到,当我用一个短变量替换用于保持树高度的 int 变量时,每个节点的保留堆从 40 下降到 32。

您可以在下图中看到这种效果:

对于 N 的 int(用于高度),树的随机节点的浅堆和保留堆为 40。

整数1 整数2

使用 N 的缩写,树的随机节点的浅堆和保留堆是 32。

短1 短2

我认为差异应该只是两个字节。为什么是8?

我也非常感谢关于其余变量的两个数字的解释。我很困惑这两个大小的堆都是 2 的分隔符,因为我希望布尔变量颜色的大小为 1。请记住,属性选项卡中的第一个 ref 是 RedBlackBST 实例。

0 投票
1 回答
9379 浏览

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

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

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

问题中的此链接说:Memory Analyzer 还可以从 IBM 系统转储和便携式堆转储 (PHD) 文件中读取与内存相关的信息。为此,只需将 IBM DTFJ 功能安装到 Memory Analyzer 0.8 或更高版本中。遵循IBM DTFJ 功能安装说明。如果 DTFJ 功能安装成功,那么“文件”“打开堆转储”应该为文件类型提供以下选项......

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

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

0 投票
1 回答
442 浏览

java - 在 Eclipse MAT 的 OQL 中:如何从长整数构造日期?

我正在通过 Eclipse MAT 对核心转储进行一些调查。我有一些 OQL,可以让我非常接近我想要的关于尚未收集的 Web 客户端会话的信息(并且占用大量内存)。

会话数据有一个日期,采用长整数格式。

这是一件小事(或者应该是),但我还没有弄清楚如何将那个长整数转换为 OQL 中有意义的日期对象,但这样做可以帮助我从潜在的泄漏中过滤掉无害的实时会话。

那么,在 MAT 的 OQL 中将 long 转换为 date 或 timestamp 的技巧是什么?

0 投票
0 回答
460 浏览

java - Eclipse 内存分析器 - 导出值

我目前正在寻找一种使用 eclipse 内存分析器从 hprof 转储中大量导出数据的方法。

造成这种情况的原因是,用于保存此数据的数据库现在永久不可用,因此我恢复它的唯一方法是将其从堆转储中取出并以编程方式对其进行解析,然后将其重新插入数据库以重新利用。

目前一个数组中有 700 条记录,我需要获取数组索引以及元素内的数据。

我附上了一张图片来最好地解释 一个图像

即使我可以将整个内容导出到某种 HTML 或 XML 文件中,我可以以编程方式解释这将是很棒的,我认为其余的将相当容易完成但是在 2 小时后我还没有找到一种方法来做到这一点.

0 投票
1 回答
64 浏览

java - 从 Java 堆中收集旧对象

我有 Order_Item 类实例,这些是 GC Roots 的路径(不包括幻像/弱/软引用): 在此处输入图像描述

我有几个问题:
1)我不确定 Order_Item 是否会被垃圾收集。
我尝试运行 System.gc(),但对象仍然在堆中。
可以根据提供的图片收集吗?

2)“本机堆栈”是什么意思?据我了解,它被视为GC root。 http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fgcroots.html 为什么某些对象(即订单 0x782032cf8)保留在“本机堆栈”中?

3)如果我有从 GC Root 到对象 A 的引用,那么该对象不会被垃圾收集吗?正确的?
如果是这样,我的 Order_Item 对象不能被垃圾收集吗?

4) 如果 3 是正确的,我如何找到保留对象 0x7821da5e0 和 0x782032cf8 的内容,以及如何取消引用/删除它们?

0 投票
0 回答
1385 浏览

java - 无法在 Eclipse 内存分析器中加载 HPROF 文件

在 MAT 中加载 HPROF 文件时出现以下错误

HPROF 解析器遇到了它无法安全处理的违反 HPROF 规范的问题。这可能是由于文件截断或 JVM 中的错误造成的。请考虑在 eclipse.org 上提交错误。要继续解析转储,您可以使用 -DhprofStrictnessWarning=true 或在 Preferences > HPROF Parser > Parser Strictness 下设置严格模式。有关详细信息,请参阅内部异常。HPROF 解析器遇到了它无法安全处理的违反 HPROF 规范的问题。这可能是由于文件截断或 JVM 中的错误造成的。请考虑在 eclipse.org 上提交错误。要继续解析转储,您可以使用 -DhprofStrictnessWarning=true 或在 Preferences > HPROF Parser > Parser Strictness 下设置严格模式。有关详细信息,请参阅内部异常。堆转储记录 0x20 大小 15,93,39, 104 不是受支持的记录类型。堆转储记录 0x20 大小 15,93,39,104 不是受支持的记录类型。

更改首选项后,它会引发以下错误

在以下期间发生内部错误:“从 '/home/local/ZOHOCORP/raamesh-1460/Downloads/Rajesh/java_pid2360.hprof' 解析堆转储”。java.lang.NullPointerException

JDK版本:1.6