私は自分のAndroidゲームをプロファイリングしていて、それを見て驚いています:
for(O o : myArrayList)
{
}
ヒープ割り当ての束を作成します。
数値i++
のforループを使用する以外に、この問題を回避するためのより良い方法はありますか?イテレータなどを事前に割り当てることはできますか?
このループ、
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
その場合、既存のオブジェクト参照の割り当てのみが含まれるため、反復にはあまり関与しないと思います。