2

PhantomReferencesを使用していません。実際の使用例はほとんどないようです。

ファントムがキューに表示された場合、それがどのオブジェクトであるか、またはどのオブジェクトであったかをどのようにして知ることができますか?get()メソッドは役に立たないようです。JavaDocによると、

ファントム参照の指示対象には常にアクセスできないため、このメソッドは常にnullを返します。

オブジェクトがシングルトンでない限り、常にPhantomReferenceのサブクラスを使用する必要があると思います。このサブクラスには、何が死んだのかを理解するために必要なメモを配置します。

これは正しいですか、それとも私は何かを逃しましたか?

これはSoftReferencesにも当てはまりますか?弱参照の場合?

関連する使用例へのリンクは素晴らしいでしょう。

4

2 に答える 2

1

あなたの質問は私にもう少しそれを調べさせました、そして私はこれが非常によく書かれた説明とすべての参照型の例を見つけました。彼は、ファントム参照のいくつかの(希薄な)使用法についても話します。

http://weblogs.java.net/blog/2006/05/04/understanding-weak-references

于 2011-10-08T02:00:12.583 に答える
1

オブジェクトがシングルトンでない限り、常にPhantomReferenceのサブクラスを使用する必要があると思います。このサブクラスには、何が死んだのかを理解するために必要なメモを配置します。

Map<Reference<?>, SomeMetadataClassOrInterface>を使用して、必要なメタデータを復元することもできます。ReferenceQueue<T>を返すので、期待するReference<T>サブクラスにキャストするか、実行させる必要があります。PhantomReferenceMap<>

その価値については、PhantomReferencesを使用すると負担がかかるようです。

ソフト参照や弱参照とは異なり、ファントム参照はエンキューされるときにガベージコレクターによって自動的にクリアされません。ファントム参照を介して到達可能なオブジェクトは、そのような参照がすべてクリアされるか、それ自体が到達不能になるまでそのまま残ります。

したがってclear()、メモリを再利用するには、自分で参照する必要があります。(JVMにこれを行わせるのに対して、そうしなければならないことに有用性がある理由は私を超えています)

于 2011-10-10T15:28:25.257 に答える