我知道可以获取一个类和给定实例的成员,但为什么很难获取给定类的所有实例? JVM 不跟踪类的实例吗? This doesn't work in Java :
myInstance.getClass.getInstances()
新的 scala 反射库可以实现这一点吗?有可能的解决方法吗? 在 SO 和 google 上搜索了反射 scaladoc,但奇怪的是找不到关于这个非常明显的问题的任何信息。
我想实验/破解一个超图数据库,受到 hypergraphDB 的启发,直接查询对象图,抛开序列化。
此外,我需要访问给定对象的所有引用。现在这些信息肯定存在(GC),但是可以通过反射访问吗?
谢谢
编辑:这似乎至少可以通过使用 com.sun.jdi.ReferenceType.instances 从另一个 JVM“调试”JVM 来实现
最佳答案
“跟踪”类的所有实例几乎是不可取的,至少默认情况下是这样。这样做的成本相当大,并且该机制必须避免硬引用,否则会阻止回收其他未引用的实例。这意味着使用其中一种引用类型以及涉及的所有相关机制。
垃圾收集不需要类感知。它只关心实例是否可达。
也就是说,您可以编写代码来逐类跟踪实例化。您必须使用 java.lang.ref
中的引用类之一跟踪他们。
关于scala - 如何使用 scala Reflect 获取给定类/特征的所有实例?给定实例的所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14728800/