能否获取对象的引用计数?

38

我想知道是否有一种方法可以检查Java对象有多少引用。据我所知,唯一的方法是通过JNI接口使用JVMTI来完成。是否有一种纯Java(不使用本地库)的解决方案来获取此信息?

我们正在开发一个数据结构动画教学工具(用于与学生实现某些算法),因此如果我们能以最非侵入性的方式检查“释放”的对象,那将非常好(我试图避免强制此工具的用户调用诸如objectReleased(objRef)这样的方法,以便在元素删除或类似操作时更新数据结构动画)。


3
JVM 中不跟踪引用计数。唯一的方法是进行计数才能知道。 - Gabe
1
有一个库可以用来获取对象被垃圾回收时的通知。请参考此链接以获取更多详细信息:http://sourceforge.net/projects/gcradar/。 - R.daneel.olivaw
@AmrenduPandey,不要简单地“加粗一些字母”——这不是改善问题的恰当方式。编辑应该是实质性的,而不仅仅是格式更改。 - Charles
Java没有提供计数/获取对象引用列表的功能。允许这样做可能会带来严重的问题,因为任何人都可以完成该对象,即使某个代码仍然需要它。 - Siddappa Walake
3个回答

17

根据你的描述,似乎你更关心对象被回收的时间,而不是实际引用计数。如果是这种情况,你可以使用 WeakReference 或者 PhantomReference 来确定一个被引用的对象何时准备进行 finalization。

参见:


6

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接