如何找出对象有多少引用?

Bar*_*man 8 java memory jvm reference

是否有可能和/或很容易找出任意对象有多少传入引用?也就是说,有多少个对象指的是它.

提前致谢...

And*_*dyG 5

简短的答案是:自己算一下。

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

是否可以获取对象引用计数?

谷歌搜索打开该页面: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;
     }
}
Run Code Online (Sandbox Code Playgroud)

您可以建立一个自我增强的“协议”,在每次使用MyObject时都需要这种样板,但这会很笨拙,而且很容易出错。并非所有情况都像上面的情况那样简单:例如,如果您有两个引用的生命周期重叠但不嵌套,则无法将它们完美地匹配到try / final的词法范围。

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

退后一步:为什么要使用这些参考计数?您要实现什么目的?与追求这一非常困难的策略相比,实现您的总体策略可能是更好的方法。