Java EclipseMat:查找';是什么引起了泄漏

Java EclipseMat:查找';是什么引起了泄漏,java,eclipse,heap-dump,Java,Eclipse,Heap Dump,我有一个单例对象,它包含一些ConcurrentHashMaps,其中一个导致内存泄漏(即,它占用了2GB堆的99.5%)。是否有一种方法可以使用EclipseMat(或另一个堆转储分析工具)确定不同哈希映射的变量名称?在这种情况下,类是 class ABunchOfMaps { ConcurrentMap<Long, String> map1 = new ConcurrentHashMap<>(); ConcurrentMap<Long, Stri

我有一个单例对象,它包含一些ConcurrentHashMaps,其中一个导致内存泄漏(即,它占用了2GB堆的99.5%)。是否有一种方法可以使用EclipseMat(或另一个堆转储分析工具)确定不同哈希映射的变量名称?在这种情况下,类是

class ABunchOfMaps {
    ConcurrentMap<Long, String> map1 = new ConcurrentHashMap<>();
    ConcurrentMap<Long, String> map2 = new ConcurrentHashMap<>();
    ConcurrentMap<Long, String> map3 = new ConcurrentHashMap<>();
}
class-ABunchOfMaps{
ConcurrentMap map1=新的ConcurrentHashMap();
ConcurrentMap map2=新的ConcurrentHashMap();
ConcurrentMap map3=新的ConcurrentHashMap();
}

有没有办法确定是map1、map2还是map3导致泄漏?我所能做的就是获取地图的地址,而不是它们的名字。我正在使用独立的eclipse内存分析器,版本为1.6.1。

我知道它非常旧的线程。面临同样的问题。转到“按传入引用列出对象”->,这将为您提供变量名

我知道它非常古老的线程。面临同样的问题。转到“按传入引用列出对象-->这将为您提供变量名”

难道您不能只在单独的计划线程中记录大小吗?是否检查了“泄漏可疑”页面?这将显示根对象。这些类是在没有调试信息的情况下编译的吗?@Konrad泄漏可疑页面告诉我ABunchOfMaps是根对象,泄漏是由ConcurrentHashMap引起的,但它没有给出映射的名称。不过,没有理由认为它应该只是其中一个映射。我真的认为一个简单的日志行可以帮助这里。它并没有真正回答这个问题,但它将有助于调查这个问题issue@Zim-Zam你有没有查看详细信息页面?如果我检查堆转储,我会看到成员。您可以记住引用并检查“ABunchOfMaps”对象实例的详细信息。所有成员都应与对象引用一起列出。您不能只在单独的计划线程中记录大小吗?是否检查了“泄漏可疑”页面?这将显示根对象。这些类是在没有调试信息的情况下编译的吗?@Konrad泄漏可疑页面告诉我ABunchOfMaps是根对象,泄漏是由ConcurrentHashMap引起的,但它没有给出映射的名称。不过,没有理由认为它应该只是其中一个映射。我真的认为一个简单的日志行可以帮助这里。它并没有真正回答这个问题,但它将有助于调查这个问题issue@Zim-Zam你有没有查看详细信息页面?如果我检查堆转储,我会看到成员。您可以记住引用并检查“ABunchOfMaps”对象实例的详细信息。所有成员都应与对象引用一起列出。