2

我知道获取一个类的成员和给定实例的成员是可能的,但是为什么很难获取给定类的所有实例呢?JVM 不跟踪类的实例吗?这在 Java 中不起作用

 myInstance.getClass.getInstances()

新的 scala 反射库可以做到这一点吗?有可能的解决方法吗?在 SO 和 google 上搜索反射 scaladoc,但奇怪的是找不到关于这个非常明显的问题的任何信息。

我想试验/破解一个超图数据库,受超图数据库的启发,直接查询对象图,留出序列化。

此外,我需要访问对给定对象的所有引用。现在这个信息肯定是存在的(GC),但它可以通过反射访问吗?

谢谢

编辑:这似乎至少可以通过使用 com.sun.jdi.ReferenceType.instances 从另一个 JVM“调试”JVM

4

1 回答 1

3

“跟踪”类的所有实例几乎是不可取的,至少默认情况下是不可取的。这样做的成本很高,并且该机制必须避免硬引用,因为硬引用会阻止回收其他未引用的实例。这意味着使用其中一种引用类型和所有相关的机器。

垃圾收集不需要是类感知的。它只关心实例是否可达。

也就是说,您可以编写代码来逐个类地跟踪实例化。您必须使用其中一个参考类java.lang.ref来跟踪它们。

于 2013-02-06T16:05:41.010 回答