简短的答案是:自己算一下。
这个另一个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本身无法访问这些统计信息。)
如果要维护自己对象的引用计数,则需要手动进行。这可能是容易出错的业务:
Run Code Online (Sandbox Code Playgroud)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时都需要这种样板,但这会很笨拙,而且很容易出错。并非所有情况都像上面的情况那样简单:例如,如果您有两个引用的生命周期重叠但不嵌套,则无法将它们完美地匹配到try / final的词法范围。
集合框架将是非常有限的,或者至少很难使用。例如,当您将MyObject放入SortedMap中时,在Map中保留了对MyObject的引用?答案是否取决于MyObject是用作键还是用作值,还是同时用作两者?在我看来,保持准确计数的机会很小。
退后一步:为什么要使用这些参考计数?您要实现什么目的?与追求这一非常困难的策略相比,实现您的总体策略可能是更好的方法。
| 归档时间: |
|
| 查看次数: |
5159 次 |
| 最近记录: |