में "if" स्थितियों का अजीब अनुकूलन मैंने जावा कंपाइलर की दृढ़ता की जांच करने का निर्णय लिया है; इस प्रकार, मैंने एक साधारण वर्ग लिखा है।जावा
public class Foo {
public Foo(boolean a, int b) {
if (a == true && a != false) {
b = 1;
}
}
}
मैं सोच रहा था कि क्या संकलक की तरह सरल कुछ करने के लिए शर्त को अनुकूलित करेंगे:
if (a == true) {}
मैं कक्षा संकलित और फिर javap
उपकरण के साथ यह disassembled। जब मैंने आउटपुट पर एक नज़र डाली, तो मैं वास्तव में डंबफॉल्ड था, क्योंकि कंपाइलर इन दोनों स्थितियों की जांच करता है, जो नीचे स्पष्ट रूप से दिखाया गया है।
Compiled from "Foo.java"
public class Foo {
public Foo(boolean, int);
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: iload_1
5: iconst_1
6: if_icmpne 15
9: iload_1
10: ifeq 15
13: iconst_1
14: istore_2
15: return
}
मैं बस उत्सुक हूँ, क्यों यह निरर्थक निर्देश निष्पादित हो रहा है, जब यह सरल कुछ करने के लिए अनुकूलित किया जा सकता है?
यह एक आम उपयोग केस नहीं होना चाहिए। कंपाइलर्स का उद्देश्य उन चीजों को संकलित करने से रोकना और रोकना है जो कोई समझ नहीं लेते हैं। – itachi
@itachi वास्तव में नहीं। कोड लिखने के बहुत सारे बेवकूफ तरीके हैं, और उन सभी के लिए ऑप्टिमाइज़ेशन लिखने से संकलक को बनाए रखने और बग्स को स्वयं प्रवण करने में कठिनाई होती है। – RealSkeptic
माइनक्राफ्ट को पूरी तरह से उलट करने के बाद, मैं सुरक्षित रूप से कह सकता हूं कि जावा बहुत कम है, अगर कोई है, अर्थपूर्ण अनुकूलन। – Qix