[英]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.