【发布时间】:2019-07-15 05:01:13
【问题描述】:
循环展开是否适用于在运行时确定迭代次数的循环?例如。是否会考虑在此代码中展开内部循环:
for(int j = 0; j < HUGE_NUMBER; j++) {
int N = getCount(); // say N = 5
for(int i = 0; i < N; i++) {
doSomething(i);
}
}
循环展开在 Scala 中的工作方式是否不同? JIT 编译器会以同样的方式处理以下代码 sn-ps 吗?
// Java
int N = getCount();
for(int i = 0; i < N; i++) {
doSomething(i);
}
// Scala
val N = getCount();
var i = 0
while(i < N) {
doSomething(i);
i+=1
}
【问题讨论】:
-
我希望绝大多数循环都会在运行时确定迭代计数(想想 ArrayLists 中的所有循环等),所以我确信那些将能够展开 - 可能在JIT 编译器已经看到它们运行了几次,因此可以估计如何最好地处理每种情况。