ReferenceQueue<Integer> queueObj = new ReferenceQueue<Integer>();
WeakReference<Integer> referenceObj = new WeakReference<Integer>(new Integer(1), queueObj);
以上のように理解していますが、
- まず、新しい Integer(1)オブジェクトのWeakReference referenceObjオブジェクトを作成します。
- 次に、システムがreferenceObjオブジェクトをqueueObj オブジェクトに移動します。現在、queueObjにはreferenceObj要素があります。
- 3 番目に、システム GC で新しい Integer(1)オブジェクトを取得し、 queueObjオブジェクトをクリアします。現在、queueObjは空です。
正しく?
編集:
- まず、新しい Integer(1)オブジェクトのWeakReference referenceObjオブジェクトを作成します。
- 次に、システムがreferenceObjオブジェクトをqueueObj オブジェクトに移動します。現在、 queueObjにはreferenceObj要素があり、新しい Integer(1)オブジェクトがシステムによって収集されています。
- 第三に、一部のプログラムはqueueObj が空かどうかを検出します。そうでない場合は、いくつかの指示対象が収集されたことがわかるので、queueObjを反復処理してreferenceObjを処理できます。