मेरे पास बहुत लंबे समय से एक ही सवाल था। इसलिए मैंने कोड का एक और भी सरल टुकड़ा परीक्षण किया।
निष्कर्ष: के लिए इस तरह के मामलों है कोई प्रदर्शन अंतर।
बाहर का लूप केस
int intermediateResult;
for(int i=0; i < 1000; i++){
intermediateResult = i+2;
System.out.println(intermediateResult);
}
लूप केस के अंदर
for(int i=0; i < 1000; i++){
int intermediateResult = i+2;
System.out.println(intermediateResult);
}
मैंने IntelliJ के डिकंपाइलर पर संकलित फ़ाइल की जाँच की और दोनों मामलों के लिए, मुझे वही मिला Test.class
for(int i = 0; i < 1000; ++i) {
int intermediateResult = i + 2;
System.out.println(intermediateResult);
}
मैंने इस उत्तर में दी गई विधि का उपयोग करते हुए दोनों केस के लिए कोड भी डिसाइड किया । मैं केवल उत्तर के लिए प्रासंगिक भागों को दिखाऊंगा
बाहर का लूप केस
Code:
stack=2, locals=3, args_size=1
0: iconst_0
1: istore_2
2: iload_2
3: sipush 1000
6: if_icmpge 26
9: iload_2
10: iconst_2
11: iadd
12: istore_1
13: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
16: iload_1
17: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
20: iinc 2, 1
23: goto 2
26: return
LocalVariableTable:
Start Length Slot Name Signature
13 13 1 intermediateResult I
2 24 2 i I
0 27 0 args [Ljava/lang/String;
लूप केस के अंदर
Code:
stack=2, locals=3, args_size=1
0: iconst_0
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 26
9: iload_1
10: iconst_2
11: iadd
12: istore_2
13: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
16: iload_2
17: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
20: iinc 1, 1
23: goto 2
26: return
LocalVariableTable:
Start Length Slot Name Signature
13 7 2 intermediateResult I
2 24 1 i I
0 27 0 args [Ljava/lang/String;
आप अधिक ध्यान दें, तो केवल Slot
करने के लिए सौंपा i
और intermediateResult
में LocalVariableTable
उपस्थिति के अपने आदेश की एक उत्पाद के रूप में बदली है। स्लॉट में समान अंतर कोड की अन्य लाइनों में परिलक्षित होता है।
- कोई अतिरिक्त ऑपरेशन नहीं किया जा रहा है
intermediateResult
दोनों मामलों में अभी भी एक स्थानीय चर है, इसलिए कोई अंतर नहीं है।
बक्शीश
कंपाइलर एक टन अनुकूलन करते हैं, इस मामले में क्या होता है, इस पर एक नज़र डालें।
शून्य काम का मामला
for(int i=0; i < 1000; i++){
int intermediateResult = i;
System.out.println(intermediateResult);
}
शून्य कार्य विघटित
for(int i = 0; i < 1000; ++i) {
System.out.println(i);
}