我有一个简单的问题。增强型for循环是否具有更大的内存占用量,或者它们都编译为相同的结构,使它们的内存占用量相同,因此使
for(Object o : collection) { ... }
始终比只读操作更好?我提出这个问题的原因是,在我正在开发的模拟器中,每帧(60 /秒),我会针对可能包含数千个项的数组运行操作,例如要绘制的面,要进行光线追踪等。循环
for(Object o : collection) {
o.doSomething();
}
看起来它可能会对集合进行内存复制(我似乎从之前的阅读中记得它确实这样做),在大多数情况下可以接受,但如果您每秒执行30000次光线追踪并且持续60秒,则不可行。
另一方面,循环显然是
count = collection.size();
for(i = 0; i < count; i++) {
collection[i].doSomething();
}
这个程序一切都是通过引用来完成的,尽管它难以阅读(但老实说,也没有太多难度),占用空间相对较小。
有什么想法吗?
(注意:对于循环的难度影响只在几层嵌套后才会显现——对于单层循环,收益极小。我从经验中得出这个结论……例如:collection[i].property.subcollection[j].row[k].col[l].prop.subtable[m]
可能会让人崩溃,特别是如果其中一些需要强制转换:((Type3)((Type2)((Type1)collection[i]).property.subcollection[j].row[k]).col[l].prop).subtable[m]
。)
collection
是一个数组还是一个集合类? - Lukas EderIterator.remove()
... - jtahlbornIterable
的循环编译成的字节码是不同的。我猜这对你的问题很重要... - Lukas Eder