リンクhttps://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.htmlに従って、PhantomReferencesはオブジェクトがメモリから物理的に削除された場合にのみキューに入れられ、WeakReferencesはファイナライズまたはガベージ コレクションが行われる前にキューに入れられます。実際に起こりました。
違いは、エンキューが発生する正確なタイミングにあります。WeakReferences は、それらが指すオブジェクトが弱く到達可能になるとすぐにキューに入れられます。これは、ファイナライズまたはガベージ コレクションが実際に行われる前です。理論的には、オブジェクトは非正統的な finalize() メソッドによって「復活」することさえできますが、WeakReference は無効なままになります。PhantomReferences は、オブジェクトがメモリから物理的に削除された場合にのみキューに登録され、get() メソッドは常に null を返します。これは、ほとんど死んでいるオブジェクトを「復活」させることができないようにするためです。
一方、http://www.ibm.com/developerworks/library/j-refs/に従って、ヒープ オブジェクトが解放される前にPhantomReferenceがReferenceQueueに追加され、ファイナライズまたはガベージ コレクションの後にWeakReferencesがその ReferenceQueue に追加されます。
ソフト参照や弱参照とは異なり、PhantomReference は、ヒープ オブジェクトが解放される前に ReferenceQueue に追加されます。(すべての PhantomReference オブジェクトは、関連する ReferenceQueue を使用して作成する必要があることに注意してください。) これにより、ヒープ オブジェクトが再利用される前にアクションを実行できます。
ヒープ オブジェクトの finalize() メソッドが実行され、そのメモリが解放されると、WeakReference オブジェクトがその ReferenceQueue に追加されます (存在する場合)。
私は混乱しています。どちらが正しいですか?
基本的に、参照キューに関して弱い参照とファントム参照の違いを知りたいですか?