Scala与Java中的循环展开

时间:2019-07-15 05:01:13

标签: java scala jvm jit

循环展开是否适用于在运行时确定迭代计数的循环?例如。将在此代码中考虑将内部循环展开:

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
}

1 个答案:

答案 0 :(得分:1)

JIT编译器可处理Java字节码,因此展开行为与原始语言无关,并且将取决于所使用的特定JVM /编译器。

我不相信Scala编译器会实现自己的循环展开。在Scala中很少使用这种计数循环,因此可能不值得对其进行优化。