iterator.remove()是如何帮助我节省内存的呢?

时间:2012-11-20 15:14:12

标签: java out-of-memory heap-memory

最近,我将以下代码从 for-each更改为Iterator (使用 iterator.remove()

它立即解决了我的堆空间内存问题。

有人可以解释 iterator.remove()是如何真正帮助的?

final Iterator<Entry<String, String>> metaTagIterator = localeDO.getMetaTags().entrySet().iterator();

while (metaTagIterator.hasNext()) {
    final Entry<String, String> entry = metaTagIterator.next();

    if (ImportUtil.isI18nLiferayLayoutProperty(entry.getKey())) {
        layoutProps.setProperty(entry.getKey() + StringPool.UNDERLINE + locale, entry.getValue());
    } else if (ImportUtil.isLiferayLayoutProperty(entry.getKey())) {
        layoutProps.setProperty(entry.getKey(), entry.getValue());
    } else {
        myCustomLayoutProps.setProperty(entry.getKey() + StringPool.UNDERLINE + locale, entry.getValue());
    }
    metaTagIterator.remove();
}

2 个答案:

答案 0 :(得分:0)

我在layoutPropsmyCustomLayoutProps设置值并消耗更多内存时,我只能这样做,metaTagIterator.remove();释放内存从{{删除元素1}} 同时。 这样您就可以在迭代过程中节省一些内存需求。

答案 1 :(得分:0)

从底层集合中移除迭代器返回的最后一个元素(可选操作)。每次调用next时,只能调用一次此方法。如果在迭代正在进行的过程中修改基础集合而不是通过调用此方法,则迭代器的行为是未指定的。

这里没什么特别的。当你迭代并删除时,该对象将从集合中删除,如果它没有活动引用,它将可用于GC。