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

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

for(O o : myArrayList)
{
}

创建一堆堆分配。

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


这个循环,

     for(O o : myArrayList)
     {
     }

被转换为:

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

所以如果你使用这个模式,Iterator对象将会被分配到堆上。

如果你写如:

     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 ,因为它只涉及现有对象引用的分配。

链接地址: http://www.djcxy.com/p/66043.html

上一篇: List iterator causes heap allocations?

下一篇: Warning window hierarchy when loading delegate