如何使用堆转储识别Java Memory Analyzer中对象的引用所有者

乔森

由于我在应用程序中出现OutOfMemoryErrors问题,因此我想找出根本原因。我从AIX服务器上的IBM VM创建了一个堆转储(PHD),并尝试使用IBM Support Assistant 4.1及其内存分析器工具对其进行分析。

解析堆转储后,ISA询问我是否要运行泄漏可疑报告。

使用泄漏方面的支持,我得到了一些类的信息,这些类消耗了大量的内存。

我现在要标识的是对象引用的持有者,但是例如,我只能看到ArrayList包含哪些对象,而不能看到谁持有对该ArrayList的引用。

我如何获得该信息?

维品

在Memory Analyzer(MAT)中加载堆转储。

在此处输入图片说明 转到直方图,然后查看大尺寸的对象。

在此处输入图片说明现在,右键单击此按钮,然后选择“即时控制者”。它将打开一个统治者树,您可以识别什么在握住您的对象。

在此处输入图片说明

有时,当大尺寸对象是局部变量时,您将无法在树中看到直接的支配者。它只能告诉您变量是哪个线程的一部分。(下图没有显示此局部变量的情况)

在此处输入图片说明

在这种情况下,请检查(堆栈跟踪)在哪里获取OutOfMemoryError。然后,将其向后追溯,并尝试找出使用哪种方法将大对象创建为局部变量。在大多数情况下,我们使用相同的方法来获取大型对象,这在某个时间点显示在堆栈跟踪中,同时分配更多的内存时,我们会得到OutOfMemoryError。

更多细节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算Java对象与VisualVM的堆转储的内存使用不匹配的理论方法

来自分类Dev

如何从 HashiCorp Nomad 运行的 Java 应用程序中获取堆转储?

来自分类Dev

我如何获取在灵活环境中运行的 Java 应用程序的堆转储

来自分类Dev

如何使用windbg在堆转储中检查静态thread_local变量的内容?

来自分类Dev

什么是Java堆中的“活动”对象?(带有jmap的堆转储)

来自分类Dev

如何基于移动设备更新自定义对象中的所有者名称

来自分类Dev

如何从正在运行的JVM中捕获堆转储

来自分类Dev

堆转储中的非类路径对象

来自分类Dev

使用Spring在所有者对象中给同一个对象的多对多xml关系

来自分类Dev

如何在Javascript中查找属性的所有者

来自分类Dev

如何在AIX中更改文件所有者?

来自分类Dev

如何在Redshift中列出所有表及其创建者(或所有者)

来自分类Dev

在 Dynamics 365 API 中,当所有者可以是系统用户或团队时,如何引用正确的所有权实体以获取详细信息?

来自分类Dev

将JVisualVM快照中的“分配的对象”与Java堆转储中的实例数进行比较

来自分类Dev

如何使用QT转储SQLite DB的所有表?

来自分类Dev

如何更改目录的所有者

来自分类Dev

如何使文件的所有者可写?

来自分类Dev

如何更改流程的所有者?

来自分类Dev

Tomcat抛出了“ java.lang.OutOfMemoryError:Java堆空间”,但是转储中的堆大小小于-Xmx

来自分类Dev

Tomcat抛出了“ java.lang.OutOfMemoryError:Java堆空间”,但是转储中的堆大小小于-Xmx

来自分类Dev

git 如何识别存储库所有者?

来自分类Dev

如何在python中实现线程转储(如java中的线程转储)

来自分类Dev

如何在PostgreSQL中更改所有视图的所有者

来自分类Dev

如何在PostgreSQL中更改所有视图的所有者

来自分类Dev

如何在Linux下将正在运行的C ++进程堆转储到文件中?

来自分类Dev

您如何判断堆转储中字符串与 char[] 的比率是否表明存在问题?

来自分类Dev

在Java中获取文件创建者/所有者属性

来自分类Dev

更改所有者添加+1时如何自动在Gerrit中添加默认审阅者?

来自分类Dev

为什么Java内存转储分析器中的“堆总数”与内存设置和JVM的总使用量不对应?

Related 相关文章

  1. 1

    计算Java对象与VisualVM的堆转储的内存使用不匹配的理论方法

  2. 2

    如何从 HashiCorp Nomad 运行的 Java 应用程序中获取堆转储?

  3. 3

    我如何获取在灵活环境中运行的 Java 应用程序的堆转储

  4. 4

    如何使用windbg在堆转储中检查静态thread_local变量的内容?

  5. 5

    什么是Java堆中的“活动”对象?(带有jmap的堆转储)

  6. 6

    如何基于移动设备更新自定义对象中的所有者名称

  7. 7

    如何从正在运行的JVM中捕获堆转储

  8. 8

    堆转储中的非类路径对象

  9. 9

    使用Spring在所有者对象中给同一个对象的多对多xml关系

  10. 10

    如何在Javascript中查找属性的所有者

  11. 11

    如何在AIX中更改文件所有者?

  12. 12

    如何在Redshift中列出所有表及其创建者(或所有者)

  13. 13

    在 Dynamics 365 API 中,当所有者可以是系统用户或团队时,如何引用正确的所有权实体以获取详细信息?

  14. 14

    将JVisualVM快照中的“分配的对象”与Java堆转储中的实例数进行比较

  15. 15

    如何使用QT转储SQLite DB的所有表?

  16. 16

    如何更改目录的所有者

  17. 17

    如何使文件的所有者可写?

  18. 18

    如何更改流程的所有者?

  19. 19

    Tomcat抛出了“ java.lang.OutOfMemoryError:Java堆空间”,但是转储中的堆大小小于-Xmx

  20. 20

    Tomcat抛出了“ java.lang.OutOfMemoryError:Java堆空间”,但是转储中的堆大小小于-Xmx

  21. 21

    git 如何识别存储库所有者?

  22. 22

    如何在python中实现线程转储(如java中的线程转储)

  23. 23

    如何在PostgreSQL中更改所有视图的所有者

  24. 24

    如何在PostgreSQL中更改所有视图的所有者

  25. 25

    如何在Linux下将正在运行的C ++进程堆转储到文件中?

  26. 26

    您如何判断堆转储中字符串与 char[] 的比率是否表明存在问题?

  27. 27

    在Java中获取文件创建者/所有者属性

  28. 28

    更改所有者添加+1时如何自动在Gerrit中添加默认审阅者?

  29. 29

    为什么Java内存转储分析器中的“堆总数”与内存设置和JVM的总使用量不对应?

热门标签

归档