gpt4 book ai didi

java - 如何在 Eclipse MAT 中分析深层链接的对象

转载 作者:行者123 更新时间:2023-11-30 07:07:46 26 4
gpt4 key购买 nike

我正在尝试使用 Eclipse MAT 分析内存泄漏。我已经知道该问题是由本质上是链表的对象引起的,例如像这样的东西:

class Obj {
byte[] data;
Obj next;
}

问题在于它非常深(大约 40,000 个元素),而且它也不是标准的 LinkedList,因此此处不提供 MAT 支持。

有了第一个元素,我试图到达列表的底部,但我找不到比简单地右键单击 next 并选择 Go To 更好的方法了。 code>,如果有 40,000 个元素,则需要很长时间。有没有办法使用某种脚本来轻松到达链接堆栈的底部?

最佳答案

Is there a way to use some kind of scripting to get to the bottom of the linked stack easily?

你可以做的是使用 jhat依靠对象查询语言(也称为OOL)(一种类似于 SQL 的查询语言来查询堆转储)来对堆转储执行查询。

1。启动jhat

jhat <path-to-my-heap-dump-file>

这将默认在端口 7000 上启动 Web 服务器

2。前往OOL页面

  1. 转到http://localhost:7000/
  2. 点击其他查询部分中的执行对象查询语言 (OQL) 查询

3。执行我的查询

假设您想要获取字段 nextnullObj 实例,则要启动的查询将为以下类型:

select o from my.package.Obj o where o.next == null

然后,您将找到类 my.package.Obj 其字段 nextnull 的所有实例。只需单击您选择的实例即可获取有关它们的更深入的信息。

对于更复杂的查询,您可以引用 http://localhost:7000/oqlhelp/ 中提供的文档.

<小时/>

做同样事情的另一种方法是使用 jvisualvm它比 jhat 更加用户友好,但也消耗更多内存。

  1. 启动jvisualvm
  2. 转到文件/加载...
  3. 选择您的堆转储文件,然后单击打开,它将打开您的堆转储
  4. 然后点击OQL Console
  5. 查询编辑器部分中输入您的查询,然后单击执行
  6. 您的结果将显示在查询结果部分,然后您将能够更深入地了解您选择的实例

关于java - 如何在 Eclipse MAT 中分析深层链接的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com