हाँ यह कर सकते हैं। यहाँ एक उदाहरण है जहाँ अंतिम प्रदर्शन को बढ़ावा दे सकता है:
सशर्त संकलन एक ऐसी तकनीक है जिसमें किसी विशेष स्थिति के आधार पर कोड की पंक्तियों को वर्ग फ़ाइल में संकलित नहीं किया जाता है। इसका उपयोग उत्पादन निर्माण में टन डिबगिंग कोड को हटाने के लिए किया जा सकता है।
निम्नलिखित को धयान मे रखते हुए:
public class ConditionalCompile {
private final static boolean doSomething= false;
if (doSomething) {
// do first part.
}
if (doSomething) {
// do second part.
}
if (doSomething) {
// do third part.
}
if (doSomething) {
// do finalization part.
}
}
DoSomething विशेषता को अंतिम विशेषता में परिवर्तित करके, आपने संकलक को बताया है कि जब भी वह doSomething को देखता है, तो उसे संकलन-समय प्रतिस्थापन नियमों के अनुसार इसे गलत के साथ प्रतिस्थापित करना चाहिए। कंपाइलर का पहला पास कोड को कुछ इस तरह बदलता है :
public class ConditionalCompile {
private final static boolean doSomething= false;
if (false){
// do first part.
}
if (false){
// do second part.
}
if (false){
// do third part.
}
if (false){
// do finalization part.
}
}
एक बार जब यह हो जाता है, तो संकलक इस पर एक और नज़र डालता है और देखता है कि कोड में अप्राप्य कथन हैं। चूंकि आप एक उच्च-गुणवत्ता वाले संकलक के साथ काम कर रहे हैं, यह उन सभी अनुपलब्ध बाइट कोड को पसंद नहीं करता है। तो यह उन्हें हटा देता है, और आप इसे समाप्त करते हैं:
public class ConditionalCompile {
private final static boolean doSomething= false;
public static void someMethodBetter( ) {
// do first part.
// do second part.
// do third part.
// do finalization part.
}
}
इस प्रकार किसी भी अत्यधिक कोड, या किसी भी अनावश्यक सशर्त जाँच को कम करना।
संपादित करें: एक उदाहरण के रूप में, चलो निम्नलिखित कोड लेते हैं:
public class Test {
public static final void main(String[] args) {
boolean x = false;
if (x) {
System.out.println("x");
}
final boolean y = false;
if (y) {
System.out.println("y");
}
if (false) {
System.out.println("z");
}
}
}
जावा 8 के साथ इस कोड को संकलित करते समय और javap -c Test.class
हमारे साथ डिकम्पाइल करने पर:
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public static final void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: ifeq 14
6: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
9: ldc #22 // String x
11: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
14: iconst_0
15: istore_2
16: return
}
हम ध्यान दें कि संकलित कोड में केवल गैर-अंतिम चर शामिल है x
। यह मानता है कि अंतिम चर का प्रदर्शन पर प्रभाव पड़ता है, कम से कम इस साधारण मामले के लिए।