言葉での説明より簡単なプログラムと組んで実行してみたほうが理解しやすいです。非常に解りやすいプログラムを組んでみました。ソフト到達可能オブジェクトにする。僕からすずへの愛を無くした。ヒープの空き容量が不足したときに回収対象となる。リファレントをクリアする。System.out.println("ガッキー、今までごめんね。僕のすずへの愛は完全に消えた。ソフト到達可能オブジェクトが消えている。System.out.println("僕のすずへの愛は完全に消えた。System.out.println("僕は二人の素敵な女性を愛してしまった。System.out.println("僕はガッキーを愛してる。System.out.println("僕はすずを愛してる。System.out.println("ごめんね。僕のすずへの愛はまだ完全に消えていない。ソフト到達可能オブジェクトにする。僕からすずへの愛を無くした。ヒープの空き容量が不足したときに回収対象となる。リファレントをクリアする。System.out.println("ガッキー、今までごめんね。僕のすずへの愛は完全に消えた。ソフト到達可能オブジェクトが消えている。System.out.println("僕のすずへの愛は完全に消えた。{System.out.println("僕は二人の素敵な女性を愛してしまった。{System.out.println("僕はガッキーを愛してる。{System.out.println("僕はすずを愛してる。{System.out.println("ごめんね。僕のすずへの愛はまだ完全に消えていない。");}}}このプログラムの実行結果はつぎのようになります。僕は二人の素敵な女性を愛してしまった。僕はガッキーを愛してる。僕からすずへの愛を無くした。僕のすずへの愛はまだ完全に消えていない。ガッキー、今までごめんね。僕のすずへの愛は完全に消えた。使ったプログラムです。弱到達可能オブジェクトにする。僕からすずへの愛を無くした。ガーベジ・コレクトの回収体制となる。部分は実行されることはない。System.out.println("ガッキー、今までごめんね。僕のすずへの愛は完全に消えた。弱到達可能オブジェクトが消えている。System.out.println("僕のすずへの愛は完全に消えた。System.out.println("僕は二人の素敵な女性を愛してしまった。System.out.println("僕はガッキーを愛してる。System.out.println("僕はすずを愛してる。System.out.println("ごめんね。僕のすずへの愛はまだ完全に消えていない。弱到達可能オブジェクトにする。僕からすずへの愛を無くした。ガーベジ・コレクトの回収体制となる。部分は実行されることはない。{System.out.println("ガッキー、今までごめんね。僕のすずへの愛は完全に消えた。弱到達可能オブジェクトが消えている。System.out.println("僕のすずへの愛は完全に消えた。{System.out.println("僕は二人の素敵な女性を愛してしまった。{System.out.println("僕はガッキーを愛してる。{System.out.println("僕はすずを愛してる。{System.out.println("ごめんね。僕のすずへの愛はまだ完全に消えていない。");}}}このプログラムの実行結果はつぎのようになります。僕は二人の素敵な女性を愛してしまった。僕はガッキーを愛してる。僕からすずへの愛を無くした。僕のすずへの愛は完全に消えた。ガッキー、愛してる!プログラムの詳細はコメントと前回、前々回のエントリーを参照してくださいませ。クラスが必要となります。ことも忘れていたのでこれらを先にざっくりと調べます。クラスReference<T>このクラスは、すべての参照オブジェクトに対して共通のオペレーションを定義します。参照オブジェクトはガベージ・コレクタと密接に連携して実装されるので、このクラスを直接サブクラス化することはできません。メソッドは6個あります。clear()この参照オブジェクトをクリアします。このメソッドを呼び出しても、このオブジェクトはキューに入りません。このメソッドはJavaコードによってのみ呼び出されます。ガベージ・コレクタが参照をクリアするときは、このメソッドを呼び出さずに直接行います。CloneNotSupportedExceptionをスローします。Referenceは、効果的にクローニングできません。かわりに新規のReferenceを構築します。enqueue()この参照オブジェクトをクリアし、それが登録されているキューに登録オブジェクトを追加します。このメソッドはJavaコードによってのみ呼び出されます。ガベージ・コレクタが参照をキューに入れるときは、このメソッドを呼び出さずに直接行います。戻り値:この参照オブジェクトがキューに入れられた場合はtrue。get()参照オブジェクトのリファレントを返します。プログラムまたはガベージ・コレクタによって、この参照オブジェクトがすでにクリアされている場合、このメソッドはnullを返します。戻り値:この参照が表すオブジェクト。isEnqueued()この参照オブジェクトが、プログラムまたはガベージ・コレクタによってキューに入れられているかどうかを判定します。この参照オブジェクトが生成されたときにキューに登録されていない場合、このメソッドは常にfalseを返します。ref)指定された参照によって参照されるオブジェクトが、オブジェクトが到達不能になる可能性のあるプログラムの以前のアクションに関係なく、「強く到達可能な」のままであることを保証します。このため、参照されたオブジェクトは、少なくともこのメソッドが呼び出されるまでガベージ・コレクションによって再要求できません。クラスReferenceQueue<T>参照キューです。到達可能性が適切に変更されたことが検出されると、登録されている参照オブジェクトはガベージ・コレクタによって参照キューに追加されます。コンストラクタは引数の無いものが一つだけあります。ReferenceQueue()新しい参照オブジェクト・キューを構築します。メソッドは3個あります。poll()このキューをポーリングして、参照オブジェクトが利用可能かどうかを確認します。参照オブジェクトが遅延なしで利用可能な場合、それがキューから削除されて、返されます。それ以外の場合、このメソッドは即座にnullを返します。InterruptedExceptionこのキューの次の参照オブジェクトを削除します。参照オブジェクトが利用可能になるまでブロックされます。戻り値:参照オブジェクト。InterruptedExceptionこのキューの次の参照オブジェクトを削除します。参照オブジェクトが利用可能になるか、指定されたタイム・アウトの期限が切れるまでブロックします。このメソッドはリアルタイム保証を行いません。Object.wait(long)メソッドを呼び出した場合と同様にタイム・アウトのスケジュールを作成します。値が正の場合、このキューに参照が追加されるのを待つ間、timeoutミリ秒の間ブロックされる。0の場合、無期限にブロックされる。クラスPhantomReference<T>ファントム参照オブジェクトです。ファントム参照オブジェクトがキューに入れられるのは、キューに入れておかないとそれらのリファレントが再生される可能性があるとコレクタが判断したときです。幻の参照は、死後のクリーンアップ・アクションをスケジュールするために最も頻繁に使用されます。ある時点でオブジェクトが「ファントム到達可能」であるとガベージ・コレクタが判断したとします。その時点で、そのオブジェクトへのすべてのファントム参照と、そのオブジェクトに到達可能な他のファントム到達可能オブジェクトへのすべてのファントム参照を原子的にクリアします。同時に、または後で、参照キューに登録されたそれらの新たにクリアされたファントム参照をエンキューします。再生可能なオブジェクトをそのままにしておくために、ファントム参照のリファレントを取り出すことはできません。ファントム参照のgetメソッドは、常にnullを返します。コンストラクタは引数を二つ取るものが一つだけあります。q)指定されたオブジェクトを参照し、指定されたキューに登録されている新しいファントム参照を作成します。そのgetメソッドは常にnullを返し、キューを持たないのでエンキューされません。参照が登録されるキュー。登録が必要ない場合はnullメソッドは一つだけあります。get()参照オブジェクトのリファレントを返します。ファントム参照のリファレントは常にアクセス不可能なため、このメソッドは常にnullを返します。