अधिकांश संकलक ऑप्टिमाइज़ेशन एल्गोरिदम का उपयोग करके कोड अनुकूलित करते हैं जो हेरिस्टिक (अनुभव-आधारित तकनीकों) और अनुमानों पर भरोसा करते हैं। नीचे कोड नियंत्रण प्रवाह विश्लेषण में आ जाएगा। मैंने कार्यक्रम के बहुत सारे नमूने
केस ए) यदि अंतिम चर के साथ - कंपाइलर एक चेतावनी मृत कोड फेंकता है। जेनरेट बाइट कोड में कोई अन्य-कथन नहीं है।
public static void main(java.lang.String[])
Stack=1, Locals=2, Args_size=1
0: iconst_0
1: istore_1
2: return
LineNumberTable:
line 42: 0
line 54: 2
LocalVariableTable:
Start Length Slot Name Signature
0 3 0 args [Ljava/lang/String;
2 1 1 selection I
}
केस बी) यदि अंतिम चर के बिना - कोई संकलक त्रुटि नहीं है लेकिन कोई कोड अनुकूलन भी नहीं है।
final int selection i=100; //case A
//int selection i=100; //case B
if(selection==1){
System.out.println("Hi");
}else if(selection==2){
}else{
}
प्रकरण सी) अगर-किसी और अंतिम चर के साथ लेकिन अगर-बाकी बयान किसी अन्य विधि में डाल दिया जाता
computeIfLese(int selection)
- कोई कोड अनुकूलन किया के बाद से इस विधि के साथ अन्य उदाहरण द्वारा लागू किया जा सकता है कहते हैं पैरामीटर के अलग-अलग मूल्य (जाहिर है)।
चूंकि संकलक अनुकूलन तकनीक हेरिस्टिक्स पर आधारित है, इसलिए यह मामला मिस के रूप में होता, लेकिन सबसे दुर्लभ मामले के बारे में कौन सोचता। जावा देवताओं से
टिप्पणियां की प्रतीक्षा ... :)
यहाँ एक रहने वाले सबूत है कि संकलक अनुकूलित this.Check लेबल 5 नहीं किया है: अंतिम पैरामीटर होने के अलावा
public static void main(java.lang.String[]);
Code:
Stack=2, Locals=2, Args_size=1
0: bipush 100
2: istore_1
3: bipush 100
5: lookupswitch{ //2
200: 32;
300: 40;
default: 48 }
32: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
35: ldC#22; //String 200
37: invokevirtual #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
40: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
43: ldC#30; //String 300
45: invokevirtual #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
48: return
LineNumberTable:
line 11: 0
line 15: 3
line 17: 32
line 18: 40
line 21: 48
LocalVariableTable:
Start Length Slot Name Signature
0 49 0 args [Ljava/lang/String;
3 46 1 selection I
StackMapTable: number_of_entries = 3
frame_type = 252 /* append */
offset_delta = 32
locals = [ int ]
frame_type = 7 /* same */
frame_type = 7 /* same */
}
क्या आपको पता है कि स्विच क्या करता है? आप [ट्यूटोरियल] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html) पढ़ना चाहेंगे। –
क्यों संकलन-समय स्थिरांक पर स्विच करने में सक्षम नहीं हैं? –
'स्विच' किसी भी मूल्य को पुन: असाइन नहीं कर रहा है। –