Java 如何找出一个对象有多少个引用?
是否有可能和/或容易找出任意对象有多少传入引用?也就是说,有多少对象引用它Java 如何找出一个对象有多少个引用?,java,memory,reference,jvm,Java,Memory,Reference,Jvm,是否有可能和/或容易找出任意对象有多少传入引用?也就是说,有多少对象引用它 提前感谢…简单的回答是:自己数一数 另一个StackOverflow问题有一些有用的答案和资源 更多的谷歌搜索出现在这个页面上: 这表明: Java不维护引用计数。特定的JVM可能(I) 还没有听说过这样做),但是如果JVM维护引用 这是JVM实现内部的“私事”。 Java没有用于检索引用计数的构造或实用程序类, 即使JVM碰巧维护了它们。(类似地,JVM可能会 维护与其JIT编译器关联的计数器,但 Java本身无法访
提前感谢…简单的回答是:自己数一数 另一个StackOverflow问题有一些有用的答案和资源 更多的谷歌搜索出现在这个页面上: 这表明: Java不维护引用计数。特定的JVM可能(I) 还没有听说过这样做),但是如果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放入已分类的地图时
例如,映射中保留了多少对MyObject的引用?
答案是否取决于MyObject是用作键还是用作键
价值,还是两者兼而有之?在我看来,你保持
准确的计数很难
退一步:为什么要这些引用计数?什么目的
你在努力实现吗?也许有更好的方法来实现你的目标
总体战略比追求这一非常困难的战术更为重要
如果您确实需要这些信息,请触发javacore转储,然后分析其中包含的信息。但是,除非您有一个特定的问题要解决,例如“内存泄漏”,否则您可能不需要这些信息。这个问题只能由具有非代停止世界垃圾收集器的VM来回答。JVM不需要这样的垃圾收集器,因此,不,这是不可能的
即使使用这样的GC,也允许不同的线程保留非易失性字段的副本。这可能会混淆在活动对象图中查找特定对象时会发现的引用数量。在Netbeans中,您可以使用“查找使用情况”功能查看特定项目中引用了特定类的位置
在项目资源管理器中,选择该类,然后右键单击->查找用法。您可以进一步解释您的问题吗?引用计数不能用于任意对象,只能用于非循环对象。一些引用计数系统(带有DOM节点的浏览器)确实会识别引用计数对象之间的循环以释放内存,但这意味着引用计数将只是计数的上限。