ReferenceQueue<Integer> queueObj = new ReferenceQueue<Integer>();
WeakReference<Integer> referenceObj = new WeakReference<Integer>(new Integer(1), queueObj);


我在上面这样理解


首先,为新的Integer(1)对象创建WeakReference referenceObj对象。
其次,系统将referenceObj对象移至queueObj对象。现在queueObj具有referenceObj元素。
第三,系统GC新的Integer(1)对象,并清除queueObj对象。现在queueObj为空。


正确吗?

编辑:


首先,为新的Integer(1)对象创建WeakReference referenceObj对象。
其次,系统将referenceObj对象移至queueObj对象。现在queueObj具有referenceObj元素,系统已收集了新的Integer(1)对象。
第三,一些程序检测queueObj是否为空。如果没有,您就知道已经收集了一些参照对象,并且可以迭代queueObj来处理referenceObj。

最佳答案

第一和第二,正确。第三,不正确。由您决定是否处理ReferenceQueue,删除条目,对应用程序意味着什么对您的应用程序采取行动,等等。例如,WeakHashMap在后台处理ReferenceQueue以了解何时从地图中删除项目。

08-27 16:08