2

クラスと特定のインスタンスのメンバーを取得できることはわかっていますが、特定のクラスのすべてのインスタンスを取得するのが難しいのはなぜですか? JVM はクラスのインスタンスを追跡しませんか? これは Java では機能しません:

 myInstance.getClass.getInstances()

これは、新しい scala Reflect ライブラリで可能ですか? 可能な回避策はありますか? SOとGoogleでリフレクションscaladocを検索しましたが、奇妙なことに、この非常に明白な質問に関する情報が見つかりませんでした。

hypergraphDB に触発されたハイパーグラフ データベースを実験/ハックし、オブジェクト グラフを直接クエリして、シリアライゼーションを脇に置きたいと考えています。

さらに、特定のオブジェクトへのすべての参照にアクセスする必要があります。この情報は確かに存在しますが (GC)、リフレクションによってアクセスできるのでしょうか?

ありがとう

編集:これは、com.sun.jdi.ReferenceType.instances を使用して、少なくとも別の JVM から JVM を「デバッグ」することによって可能であるように見えます。

4

1 に答える 1

3

クラスのすべてのインスタンスを「追跡」することは、少なくともデフォルトでは望ましくありません。そうすることにはかなりのコストがかかり、メカニズムは、参照されていないインスタンスの再利用を防ぐハード参照を回避する必要があります。つまり、参照型の 1 つと関連するすべての機構を使用します。

ガベージ コレクションは、クラスを認識する必要はありません。インスタンスが到達可能かどうかのみを気にします。

つまり、インスタンス化をクラスごとに追跡するコードを作成できます。java.lang.refそれらを追跡するには、参照クラスのいずれかを使用する必要があります。

于 2013-02-06T16:05:41.010 に答える