Java 列表迭代器导致堆分配?

Java 列表迭代器导致堆分配?,java,android,Java,Android,我正在分析我的android游戏,惊讶地发现: for(O o : myArrayList) { } 创建一组堆分配 除了使用数值i++for循环外,还有更好的方法解决这个问题吗?我可以预先分配迭代器吗?这个循环 for(O o : myArrayList) { } 转换为: for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); ) { O o

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

for(O o : myArrayList)
{
}
创建一组堆分配

除了使用数值
i++
for循环外,还有更好的方法解决这个问题吗?我可以预先分配迭代器吗?

这个循环

     for(O o : myArrayList)
     {
     }
转换为:

     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        O o = iter.next();
     }
for(迭代器iter=myArrayList.Iterator();iter.hasNext();)
{
O=iter.next();
}
因此,如果使用此模式,迭代器对象将在堆上分配

如果你这样写:

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

O=null;
迭代器iter=myArrayList.Iterator();
while(iter.hasNext()){
o=iter.next();
}  

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

这是否仍然会导致GC被调用的次数远远超过它应该调用的次数?这就是我想要阻止的。我想如果你声明
O在循环之外,然后每次它都会使用列表中的元素更改
o
的引用,这应该更好。这些对象(循环迭代器)很可能只存在于托儿所中,并且永远不会对主要GC集合作出贡献。不,没有性能损失。看看这个[response][1][1]:我不关心性能,我只是想在游戏中避免垃圾收集器。
    O o = null;
    Iterator<O> iter = myArrayList.iterator();
    while(iter.hasNext()){
        o = iter.next();
    }