scala - 如何使用 scala Reflect 获取给定类/特征的所有实例?给定实例的所有引用?

标签 scala reflection instance scala-2.10

我知道可以获取一个类和给定实例的成员,但为什么很难获取给定类的所有实例? 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/

相关文章:

scala - 如何与 Akka Actor 一起使用可堆叠特征模式?

c# - 使用另一个类实例访问类方法?

c# - 我可以在 .NET Core 中获取私有(private)构造函数吗?

scala - 玩框架 2.4、Guice 和 securesocial

scala - 重新启动 Play 时启动异常

Java isInterface() 不会为接口(interface)返回 true

android - 无论如何交换或重新排序 fragment BackStack 条目?

java - 创建了多少字符串对象(String.format())?

zend-framework2 - Zend Framework 2 没有返回实例?

scala - 压缩多个序列