列表迭代器会导致堆分配吗?

jma*_*erx 7 java android

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

for(O o : myArrayList)
{
}
Run Code Online (Sandbox Code Playgroud)

创建一堆堆分配.

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

Yog*_*ngh 4

这个循环,

     for(O o : myArrayList)
     {
     }
Run Code Online (Sandbox Code Playgroud)

转换为:

     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        O o = iter.next();
     }
Run Code Online (Sandbox Code Playgroud)

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

如果你这样写:

     O o = null;
     for(Iterator<O> iter = myArrayList.iterator(); iter.hasNext(); )
     {
        o = iter.next();
     }
Run Code Online (Sandbox Code Playgroud)

或者

    O o = null;
    Iterator<O> iter = myArrayList.iterator();
    while(iter.hasNext()){
        o = iter.next();
    }  
Run Code Online (Sandbox Code Playgroud)

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