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

我在上面这样理解,

  • 首先,为new Integer(1)对象创建 WeakReference referenceObj对象。
  • 其次,系统将referenceObj对象移动到queueObj 对象中。现在queueObjreferenceObj元素。
  • 三、系统GC新的Integer(1)对象,并清除queueObj对象。现在queueObj是空的。

对吗?

编辑:

  • 首先,为new Integer(1)对象创建 WeakReference referenceObj对象。
  • 其次,系统将referenceObj对象移动到queueObj 对象中。现在queueObj具有referenceObj元素,新的 Integer(1)对象已被系统收集。
  • 第三,一些程序检测queueObj 是否为空。如果没有,您知道收集了一些引用对象,您可以迭代queueObj来处理referenceObj
4

1 回答 1

1

第一和第二,正确。第三,不正确。由您来处理 ReferenceQueue、删除条目、根据条目对您的应用程序意味着什么等。例如,WeakHashMap 在后台处理 ReferenceQueue 以了解何时从地图中删除项目。

于 2012-10-11T09:37:22.967 回答