簡體   English   中英

Scala與Java中的循環展開

[英]Loop unrolling in Scala vs Java

循環展開是否適用於在運行時確定迭代計數的循環? 例如,將考慮在此代碼中展開內部循環:

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
}

JIT編譯器在Java字節碼上工作,因此展開行為與原始語言無關,並且取決於所使用的特定JVM /編譯器。

我不相信Scala編譯器會實現自己的循環展開。 在Scala中很少使用這種計數循環,因此可能不值得對其進行優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM