संकलक इस तरह के अनुकूलन प्रदर्शन कर सकते हैं। यह वास्तव में पड़ता कि निम्नलिखित के जवाब पर निर्भर करता है:
संकलक अनुमति JLS द्वारा ऐसा करने के लिए है?
कुछ मामलों में यह नहीं है। उदाहरण के लिए यदि prevX
volatile
इंस्टेंस वैरिएबल था, तो प्रत्येक बार सोर्स कोड का उपयोग होने पर इसे स्मृति से प्राप्त किया जाना चाहिए। एक और मामला यह है कि आम सबएक्सप्रेस में एक अवलोकन दुष्प्रभाव के साथ एक विधि कॉल शामिल है; यानी जहां प्रोग्राम में कुछ और हो सकता है यह बताने में सक्षम हो कि विधि को एक या दो बार कहा जाता है या नहीं।
क्या यह संकलक सक्षम है?
एक कंपाइलर को सामान्य उप-अभिव्यक्तियों का पता लगाने के लिए कोड का विश्लेषण करने की आवश्यकता होती है जो कानूनी रूप से अनुकूलित हो सकती है। यहां दो मुद्दे हैं:
क्या आवश्यक तर्क करने में सक्षम संकलक है? उदाहरण के लिए, कोई एक कंपाइलर परिकल्पना कर सकता है जो यह निर्धारित कर सकता है कि एक विशिष्ट विधि कॉल साइड-इफेक्ट मुक्त होगा और इसलिए इसे अनुकूलित किया जा सकता है। हालांकि, एक कंपाइलर बनाना जो वास्तव में ऐसा करने में सक्षम है ...और दिलचस्प समस्या है।
अनुकूलन अनुकूल है? अनुकूलन और लाभ करने की लागत के बीच एक व्यापार-बंद है। यह एक सीधा आगे व्यापार बंद नहीं है। इसे देखने की लागत को ध्यान में रखना चाहिए कि क्या ऑप्टिमाइज़ेशन किया जा सकता है ... जब यह वास्तव में नहीं हो सकता है। दूसरे शब्दों में, संकलन समय पर प्रभाव। (भालू और मन है कि जावा में अनुकूलन ज्यादातर JIT कम्पाइलर ... इसलिए आवेदन प्रदर्शन पर इस प्रभाव से कार्यावधि में किया जाता है।)
आपके जैसे एक साधारण उदाहरण में, अनुकूलन के कानूनी (सापेक्ष volatile
है) और किसी को इसे करने के लिए आधे सभ्य जेआईटी कंपाइलर की अपेक्षा करनी चाहिए।
अन्य सवाल यह है कि आप स्पष्ट रूप से अपने कोड आम भाव का मूल्यांकन करने और temporaries लिए परिणाम बताए द्वारा संकलक मदद करने के लिए प्रयास करना चाहिए है।
आईएमओ, उत्तर आम तौर पर नहीं है।
एक अच्छा कंपाइलर शायद आपके जैसा काम करेगा। और यदि ऐसा नहीं होता है, तो अगली पीढ़ी कर सकती है।
कोड शायद हाथ अनुकूलन की गारंटी नहीं देता है। जब तक आप यह निर्धारित करने के लिए अपना कोड प्रोफाइल नहीं कर लेते हैं कि बाधाएं कहां हैं, तो आपके हाथ अनुकूलन वास्तविक अनुप्रयोग प्रदर्शन के लिए अप्रासंगिक होने का एक अच्छा मौका खड़े हैं ... और आपके समय का अपशिष्ट।
एक मौका है कि आप इसे पूरा करेंगे; जैसे को भूलकर कि एक विधि कॉल का एक महत्वपूर्ण दुष्प्रभाव होता है या एक चर के लिए एक चर volatile
है।
दूसरी ओर, अगर फिर से लिखने के अपने कोड अधिक पठनीय बनाता है, कि यह करने के लिए एक अच्छा कारण नहीं है।
स्रोत
2012-01-21 00:46:09
जब तक कि चौड़ाई नकारात्मक न हो, क्या आप अभी 'if (x> y) नहीं जा सकते ...' – user949300
क्यों नहीं 'Math.max (x/width, y/width) '? इसके अलावा @ उपयोगकर्ता 9 4 9 300: यदि ये स्याही हैं, तो यह एक अलग परिणाम दे सकता है। –
@ एरिक एंड्रेस मुझे नहीं लगता कि चींटियों को मूल समस्या में कोई फर्क नहीं पड़ता है, क्योंकि यह केवल 2 तरह की जांच थी (यह समानता की जांच नहीं करता था) यदि (x> y), तो x/width का कोई तरीका नहीं है 0. लेकिन इनट्स नए प्रश्न में बहुत मायने रखेंगे, इसलिए आपको +1 करें। –
user949300