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 に答える