循环展开是否适用于在运行时确定迭代计数的循环?例如。将在此代码中考虑将内部循环展开:
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编译器会以相同的方式对待以下代码段吗?
// 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
}
答案 0 :(得分:1)
JIT编译器可处理Java字节码,因此展开行为与原始语言无关,并且将取决于所使用的特定JVM /编译器。
我不相信Scala编译器会实现自己的循环展开。在Scala中很少使用这种计数循环,因此可能不值得对其进行优化。