我的java应用程序中有一些内存泄漏。我已经使用jmap进行了2次堆转储。我看到有200个对象在增长,我认为这是内存泄漏的原因。但我需要确认它们是完全相同的物体。我同时使用MAT和visualvm进行转储分析。那么,有没有办法验证来自不同堆转储的两个对象是同一个对象呢?我的意思是,也许有一些方法可以获得这个对象的哈希码。我尝试过按对象id进行搜索,但后来我知道它是内存中对象的一个地址,所以它对我来说是无用的。
发布于 2021-08-27 13:27:52
我知道这个问题很古老,但我最终还是到了这里,试图通过谷歌找到答案。我发现OQL在VisualVM中比在MAT中更容易使用,所以我最终得到了我在VisualVM中寻找的对象,并想看看在MAT中引用它的是什么。因此,我需要能够在VisualVM中获得对象哈希码。当你有了MAT中的哈希码,你就可以直接找到你想要看到的对象。

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

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