[英]Declare variable in loop (Java Optimalization Test)
我很好奇如果我在循環外聲明變量,它應該運行得更快,因為當我在循環內聲明它時,然后在每個循環中系統需要在內存中分配一個新的整數,這需要時間。 我運行了測試,運行時間是:外部:3600ms 內部:1300ms
恰恰相反,這正是我所期望的。 為什么我在里面聲明它會更快?
public class DeclarationTestLoop {
static double outer = 9500000;
static double inner = 100;
static void outside() {
long start = System.currentTimeMillis();
Integer value = 1;
for(double i=0; i<outer; i++) {
for(int k=0; k<inner; k++) {
value++;
value--;
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
static void inside() {
long start = System.currentTimeMillis();
for(double i=0; i<outer; i++) {
for(int k=0; k<inner; k++) {
Integer value = 1;
value++;
value--;
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
public static void main(String[] args) {
System.out.println("outside");
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
System.out.println("inside");
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
System.out.println("toggle");
outside();
inside();
outside();
inside();
outside();
inside();
outside();
inside();
outside();
inside();
}
}
一個可以解釋它的元素是,Java 要找到您的外部變量,它必須首先檢查該變量是否在其自己的范圍內定義。 如果不是,那么它會向外看,...
或者它可以是其他任何東西,或者這些東西的組合。 真正的情況是,在 Java 中,JVM 已經過優化,並且足夠智能,可以檢測到您在循環中使用了一個變量,並且每次都可以對其重新分配進行優化。
在 Java 中,您不應該圍繞“低級技巧”設計代碼,因為您不是使用“低級語言”進行編程。 也許使用 C 你可以嘗試那些技巧,但在 Java 中它有點毫無意義,並且可能會降低代碼的可讀性/可維護性,因為它可能比更好的東西更糟!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.