我正在分析我的 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
参与,因为它只涉及现有对象引用的分配。
关于java - 列表迭代器导致堆分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325533/