2017-08-21 14 views
7

मैं हॉटस्पॉट कारणों के जेआईटी के बारे में तर्क करने की कोशिश कर रहा हूं। मैं ज्यादातर नवीनतम संकलन चरण (सी 2 संकलक) में रुचि रखते हैं। क्या जावा में जेआईटी ऑप्टिमाइज़ेशन के लिए दावा पर भरोसा करता है? अगर ऐसा होता, तो मैं कल्पना कर सकता था कि ऐसे उदाहरण हैं जहां कोड तेजी से को सक्षम करने के साथ सक्षम हो सकता है।जावा, आकलन और जेआईटी

उदाहरण के लिए

, इस तरह कोड का एक टुकड़ा में:

static int getSumOfFirstThree(int[] array) { 
    assert(array.length >= 3); 
    return array[0] + array[1] + array[2]; 
} 
  • करेंगे JIT, जब दावे सक्षम होते हैं, काफी चालाक पर सरणी तक पहुँचता सीमा चेकों को खत्म करने की हो सकता है?
  • वैकल्पिक रूप से, क्या ऐसे अन्य मामले हैं जिन पर आप सोच सकते हैं (व्यावहारिक या नहीं) जहां दावा वास्तव में मूल कोड को बेहतर बनाएंगे जो कि जेआईटी संकलित करेगा?

उत्तर

3

इस मामले में, कई सीमाएं जांच की जा सकती हैं, और यह संभव है कि जेआईटी उन्हें समेकित कर सके ताकि केवल एक चेक बनाया जा सके, हालांकि दावा जांच करने की आवश्यकता से बच नहीं आता है।

धारणाएं ऑप्टिमाइज़ेशन को रोकती हैं जैसे कि विधि बड़ी है और आकार यह निर्धारित करने में एक कारक है कि किसी विधि को इनलाइन करना है या नहीं। आम तौर पर इनलाइनिंग प्रदर्शन में सुधार करती है लेकिन कुछ मामलों में ऐसा नहीं होता है क्योंकि यह बड़े कोड उत्पन्न होने के कारण एल 0 या एल 1 सीपीयू कैश अक्षम हो सकता है।

जहां एक दावा प्रदर्शन में सुधार कर सकता है इसका एक उदाहरण ऐसा कुछ है।

boolean assertionOn = false; 
assert assertionOn = true; 
if (assertionOn) { 
    assumeDataIsGood(); // due to checks elsewhere 
} else { 
    expensiveCheckThatDataMightNotBeGood(); 
} 

यह शायद कथनों का उपयोग करने का विरोधी पैटर्न है, लेकिन पर वक्तव्य दिये सस्ता इरादे से होने जा रहा है।

संबंधित मुद्दे