首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用visualvm在不同的堆转储中查找2等于对象

使用visualvm在不同的堆转储中查找2等于对象
EN

Stack Overflow用户
提问于 2015-10-28 15:53:54
回答 1查看 189关注 0票数 1

我的java应用程序中有一些内存泄漏。我已经使用jmap进行了2次堆转储。我看到有200个对象在增长,我认为这是内存泄漏的原因。但我需要确认它们是完全相同的物体。我同时使用MAT和visualvm进行转储分析。那么,有没有办法验证来自不同堆转储的两个对象是同一个对象呢?我的意思是,也许有一些方法可以获得这个对象的哈希码。我尝试过按对象id进行搜索,但后来我知道它是内存中对象的一个地址,所以它对我来说是无用的。

EN

回答 1

Stack Overflow用户

发布于 2021-08-27 13:27:52

我知道这个问题很古老,但我最终还是到了这里,试图通过谷歌找到答案。我发现OQL在VisualVM中比在MAT中更容易使用,所以我最终得到了我在VisualVM中寻找的对象,并想看看在MAT中引用它的是什么。因此,我需要能够在VisualVM中获得对象哈希码。当你有了MAT中的哈希码,你就可以直接找到你想要看到的对象。

Instances视图中找到所需的对象后,右键单击它并执行Copy ID。这将为您提供哈希码。然后你可以把它放到MAT上,找到引用它的所有东西,它引用的所有东西,等等。

因此,为了回答您的问题,您可以比较散列码,以便如果两个对象具有相同的散列码,则它们是相同的对象。哈希码是在内存中创建对象的位置。它可以被垃圾收集器移动,如果它是长寿的,等等。但是为了你的目的,如果两个对象现在在相同的位置,那么它们是相同的对象,并且具有相同的哈希码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33385620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档