Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找出一个对象有多少个引用?_Java_Memory_Reference_Jvm - Fatal编程技术网

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节点的浏览器)确实会识别引用计数对象之间的循环以释放内存,但这意味着引用计数将只是计数的上限。