繁体   English   中英

如果只有迭代器存在,List 会被垃圾回收

[英]Would List be garbage collected if only iterator exists

我有创建并返回我的用户列表的方法:

private List<User> createUsers() {
    List<User> users = new ArrayList<>();
    //fill list
    return users;
}

在我得到这个列表之后,我唯一要做的就是获取迭代器并通过它进行迭代。 所以我正在考虑只返回迭代器而不是整个列表:

private Iterator<User> getUsersIterator() {
    List<User> users = new ArrayList<>();
    //fill list
    return users.iterator();
}

但我不确定那个名单是否还活着。 迭代器的存在是否避免了垃圾收集?

是的,

迭代器需要对其支持集合的引用才能检索其元素,因此对它的引用将阻止其集合被垃圾收集。

例如,在ArrayList的情况下,它被实现为一个内部类,它保留对其封闭类的引用。

迭代器的存在是否避免了集合的垃圾收集?

是的。 迭代器必须包含对集合的引用。 这是next()hasNext()方法1 的任何正常实现所需要的。

因此,如果迭代器可访问,则集合也是可访问的。

这也可能对您不利。 例如,对存储在静态变量中的迭代器的不需要的引用可能导致涉及整个集合的内存泄漏。


1 - 假设,迭代器实现可以使用软引用或弱引用,但结果可能是由于收集被垃圾收集而导致迭代“中断”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM