是否可以查看对象当前有多少引用?
场合
我有Map.Entry
的实例存储在除Map
以外的引用中,因此我可以将它们保存在我需要的位置,并直接访问这些值,而无需不断检查其键的映射。
我希望更新引用以更改为Map
。如果我使用Map.get(key)
,他们就不会。
然而有问题......
如果删除了Entry
,它仍然可以存在于仍会返回值的引用中。虽然,我可以选择永不删除,但将其设置为null
,以克服这一点。
但是,我担心如果使用了很多临时的唯一密钥,如日期,上面会导致内存中充满大量的null
条目。
我想是否有办法获得Map.Entry
的引用数量null
,如果它是1
,那么那将是Map
,意味着没有其他引用,因此删除Entry
是安全的。否则,如果有其他引用,它应该保留并仍然返回null
。
有可能吗?
答案 0 :(得分:2)
Java内存管理无法正常工作。没有什么能跟踪对象的引用数量。
听起来你真正的问题是你没有一个良好的物体生命周期模型。如果有什么东西正在检索Map.Entry
个对象并且在收集它们以外的时候继续引用它们,那么那个泄漏所在的位置。您应该使用内存分析器(我发现YourKit对此有用,但还有其他内容)来确定填充内存的内容。
他们关于C#,而不是Java,但这些博文中的要点也适用于您的情况: