有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在运行时获取对对象的引用量

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

形势
我在引用中存储了Map.Entry的实例,而不是它们的Map,因此我可以将它们保存在需要它们的地方,直接访问值,而无需不断检查到其键的映射

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

不过,这也有问题
如果删除了一个Entry,它可能仍然存在于仍然返回该值的引用中。尽管如此,我可以选择从不删除,但将它们设置为null,以克服这一问题

但是,我担心,如果使用了大量临时唯一键(如日期),随着时间的推移,上面的内容会导致内存中充满大量的null条目

我想如果有一种方法可以获得对值为nullMap.Entry的引用量,如果它是1,那么它就是Map中的一个,这意味着没有其他引用,所以删除Entry是安全的。否则,如果有其他引用,它应该保留并仍然返回null

有这种可能性吗


共 (1) 个答案

  1. # 1 楼答案

    Java内存管理不是这样工作的。没有任何东西可以跟踪对象的引用数

    听起来你真正的问题是你没有一个好的对象生命周期模型。如果有什么东西正在检索Map.Entry对象并保留引用,而不是在收集它们时,那么这就是泄漏所在。您可能应该使用内存分析器(我发现YourKit在这方面很有用,但也有其他工具)来确定什么在填充内存

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