列表迭代器会导致堆分配?
我正在分析我的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
,因为它只涉及现有对象引用的分配。