【问题标题】:Is it possible to get the object reference count?是否可以获得对象引用计数?
【发布时间】:2022-05-09 16:20:05
【问题描述】:

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

我们正在开发一种用于数据结构动画的教育工具(用于学生实现某些算法),所以如果我们能以最非侵入性的方式检查“已发布”对象会非常好(I'我试图避免强迫此工具的用户调用诸如objectReleased(objRef) 之类的方法来更新数据结构动画以进行元素删除或类似操作)。

【问题讨论】:

  • 在 JVM 中不跟踪引用计数。唯一知道的方法就是数一数。
  • 有一个库可用于在对象被垃圾回收时获取通知。更多详情请参考此链接sourceforge.net/projects/gcradar
  • @AmrenduPandey,不要简单地“加粗一些字母”——这不是改进问题的合适方法。编辑应该是实质性的,而不仅仅是格式更改。
  • Java 没有这样的规定来计算/获取对对象的引用列表。允许这样做可能是一个严重的问题,因为任何人都可以最终确定该对象,即使上面的某些代码仍然需要它。

标签: java reference


【解决方案1】:

根据您的描述,您似乎不太关心引用的实际计数,而只是简单地知道何时收集了一个对象。如果是这种情况,您可以使用WeakReferencePhantomReference 来确定引用的对象何时准备好完成。

见:

【讨论】:

    【解决方案2】:

    据我所知,Java 本身并不提供此选项。

    这里有一些关于如何手动操作的指导:

    http://www.velocityreviews.com/forums/t363649-how-do-i-get-a-reference-count-of-a-object-in-java.html

    【讨论】:

      【解决方案3】:

      Java 不是引用计数

      而我们只是不能得到不存在的东西。

      查看类似的问答,
      这解释了为什么引用递归不会导致内存泄漏:
      https://stackoverflow.com/a/72167978/8740349

      查看PhantomReference类的Javadoc:
      下载.oracle.com/javase/6/docs/api/java/lang/ref/PhantomReference.

      此外,还有一个库可以在对象被垃圾回收时通知您:
      https://sourceforge.net/projects/gcradar

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        • 2018-02-25
        • 2011-11-26
        相关资源
        最近更新 更多