如果我创建一个对象然后将该对象放入 List 或 Map,那么将该对象设置为 null 会影响 List 和 Map 的内容吗?
不,因为 theList
和 theMap
仍然对该对象有强引用。所以垃圾收集器无法从内存中回收对象。
现在如果我希望列表和地图中的内容都为空,那么在这一行之后,有可能吗?如果没有,是否可以实现?如何?
至于 List 和 Map,您可能希望使用WeakReferences来执行以下操作:
Object obj = new Object;
WeakReference<Object> weakReference = new WeakReference<>(obj);
List<WeakReference> list = new ArrayList<>();
list.add(weakReference);
Map<Integer, WeakReference> map = new HashMap<>();
map.put(1, obj);
//Now set the only strong reference to null
obj = null;
因此,如果发生垃圾收集,那么当您尝试执行以下操作时:
map.get(1).get(); //May return null if GC ocurred
list.get(0).get(); // Same here
但是您仍然必须从列表中删除地图条目和元素。
对于此清理,您必须使用ReferenceQueue来迭代您的Map
和List
.
我引用这篇文章:
只有弱可达的对象(对它的最强引用是 WeakReferences)将在下一个垃圾回收周期被丢弃 [...]