在运行时获取对Object的引用量

时间:2016-03-30 16:55:57

标签: java pointers dictionary reference

是否可以查看对象当前有多少引用?

场合
我有Map.Entry的实例存储在除Map以外的引用中,因此我可以将它们保存在我需要的位置,并直接访问这些值,而无需不断检查其键的映射。

我希望更新引用以更改为Map。如果我使用Map.get(key),他们就不会。

然而有问题......
如果删除了Entry,它仍然可以存在于仍会返回值的引用中。虽然,我可以选择永不删除,但将其设置为null,以克服这一点。

但是,我担心如果使用了很多临时的唯一密钥,如日期,上面会导致内存中充满大量的null条目。

我想是否有办法获得Map.Entry的引用数量null,如果它是1,那么那将是Map,意味着没有其他引用,因此删除Entry是安全的。否则,如果有其他引用,它应该保留并仍然返回null

有可能吗?

1 个答案:

答案 0 :(得分:2)

Java内存管理无法正常工作。没有什么能跟踪对象的引用数量。

听起来你真正的问题是你没有一个良好的物体生命周期模型。如果有什么东西正在检索Map.Entry个对象并且在收集它们以外的时候继续引用它们,那么那个泄漏所在的位置。您应该使用内存分析器(我发现YourKit对此有用,但还有其他内容)来确定填充内存的内容。

他们关于C#,而不是Java,但这些博文中的要点也适用于您的情况: