7

我正在分析我的 android 游戏并惊讶地发现:

for(O o : myArrayList)
{
}

创建一堆堆分配。

除了使用数字i++for 循环之外,有没有更好的方法来解决这个问题?我可以预先分配我的迭代器或其他东西吗?

4

1 回答 1

4

这个循环,

     for(O o : myArrayList)
     {
     }

转换为:

     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        O o = iter.next();
     }

因此,如果您使用此模式,迭代器对象将在堆上分配。

如果你这样写:

     O o = null;
     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        o = iter.next();
     }

或者

    O o = null;
    Iterator<O> iter = myArrayList.iterator();
    while(iter.hasNext()){
        o = iter.next();
    }  

那么我认为迭代中不会有太多的GC参与,因为它只涉及现有对象引用的分配。

于 2012-11-10T19:59:26.800 回答