如何找出一个对象有多少个引用? [复制]

2024-04-01

是否可以和/或容易地找出任意对象有多少个传入引用?也就是说,有多少对象引用它。

提前致谢...


简短的回答是:你自己数一下。

StackOverflow 的另一个问题有一些有用的答案和资源

是否可以获得对象引用计数? https://stackoverflow.com/questions/5334137/is-it-possible-to-get-the-object-reference-count

更多谷歌搜索会出现此页面:http://www.velocityreviews.com/forums/t363649-how-do-i-get-a-reference-count-of-a-object-in-java.html http://www.velocityreviews.com/forums/t363649-how-do-i-get-a-reference-count-of-a-object-in-java.html

这表明:

Java 不维护引用计数。特定的 JVM 可能(我 还没有听说过任何这样的),但是如果 JVM 维护引用 认为这是 JVM 实现内部的“私事”。 Java 没有构造或实用程序类来检索引用计数, 即使 JVM 碰巧维护它们。 (类似地,JVM 可能 维护与其 JIT 编译器关联的计数器,但是那些 Java 本身无法访问统计信息。)

如果您想维护自己的对象的引用计数,您将 需要手动完成。这可能是一项容易出错的业务:

MyObject ref = null;
try {
    // get a reference, increment counter
    ref = MyObject.getReference(args);
    ...
} finally {
     // decrement counter, promising to drop reference
     if (ref != null) {
         ref.release();
         ref = null;
     }
}

您可以建立一个自我强制的“协议”,需要这种类型 围绕 MyObject 的每次使用都有样板,但这会很笨拙 而且很容易出错。并非所有情况都像这样简单 上面的:例如,如果您有两个引用,其生命周期 重叠但不嵌套,你不能将它们匹配到的词法范围 尝试/终于如此整齐。

集合框架几乎是禁区,或者至少是 非常难用。当您将 MyObject 放入 SortedMap 时,对于 例如,Map 中保留了多少对 MyObject 的引用? 答案是否取决于 MyObject 是用作键还是用作 值,或两者兼而有之?在我看来,你维持的机会 准确的计数很少。

退后一步:为什么需要这些引用计数?什么目的 你想实现吗?也许有更好的方法来实现你的目标 总体战略而不是采取这种非常困难的战术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找出一个对象有多少个引用? [复制] 的相关文章

随机推荐