2011-12-26 7 views
7

मेरा प्रश्न द्वारा inlined हो रही बिल्कुल स्पष्ट है:संभावना संकलक

प्रश्न: मौका है कि एक गेटर/सेटर विधि जावा में संकलक द्वारा inlined हो जाएगी क्या है?
(जाहिर है यह करने के लिए एक निश्चित जवाब नहीं है, लेकिन अन्य जानकारी की सराहना की जाएगी)

अतिरिक्त: मैं समझता हूँ कि वहाँ हमेशा एक मौका है संकलक (मानक और JIT) एक विधि इनलाइन बनाने के लिए तय करेगा, और जब गेटर्स और सेटर्स की बात आती है तो यह आम तौर पर प्रोग्रामर चाहता है।

अग्रिम धन्यवाद।

+2

सी 1 या सी 2 (यानी ग्राहक या सर्वर)? लेकिन किसी भी तरह से बहुत अधिक, तो आप इसे तब तक मान सकते हैं जब तक कोड 'गर्म' हो। यदि आप इसे साबित करना चाहते हैं, तो जेनरेट कोड की जांच करने के लिए -XX: ++ PrintAssembly का उपयोग करें। एकमात्र मुद्दा "बजट" को रेखांकित करेगा जो सी 1 कंपाइलर पर अधिक सीमित है। – bestsss

उत्तर

3

संकलक (जावा) को ऑप्टिमाइज़ेशन पर नगण्य प्रभाव पड़ता है, ऑप्टिमाइज़ेशन रनटाइम पर होता है।

जेआईटी हां के रूप में, यह शायद जल्दी या बाद में इनलाइन हो जाएगा। इस पर निर्भर करता है कि कोड का कितना भारी उपयोग किया जाता है, इसलिए पहले एक फ़ंक्शन कॉल ओवरहेड देखा जा सकता है, लेकिन जब गेटर/सेटर को अक्सर पर्याप्त रूप से बुलाया जाता है तो यह रेखांकित है।

+0

जावैक में एक कठिन समय है, क्योंकि हम अभी भी किसी भी समय एक वैध स्टैक ट्रेस चाहते हैं। लेकिन फिर एक विधि के कॉल ओवरहेड की परवाह क्यों करें जिसे केवल कुछ सौ बार कहा जाता है? सी 2 में काफी बड़ा इनलाइन बजट है, जिसका अर्थ है कि एक गेटर/सेटर हमेशा किसी भी तरह से रेखांकित किया जाएगा। हालांकि इस संबंध में सी 1 अधिक सीमित हो सकता है। – Voo

+0

सच। मैं इनलाइन होने की संभावना के सवाल को हल करने की कोशिश कर रहा था। – Shaunak

+1

javac सभी – bestsss

2

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

2

कंपाइलर एक विधि है जब कोई विधि final है और एक्सेस किए गए फ़ील्ड कॉलर तक पहुंच योग्य हैं। फिर यह निर्धारित करने के लिए संकलक पर निर्भर करता है कि विधि इनलाइनिंग के लिए "सरल" है या नहीं।

अभ्यास में, एक सेटिंग को स्थापित करना या प्राप्त करना आम तौर पर काफी सरल माना जाता है, इसलिए एक सुलभ क्षेत्र के लिए अंतिम एक्सेसर रेखांकित किया जाएगा। निजी क्षेत्रों के लिए एक्सेसर्स को उनकी घोषणा कक्षा के भीतर रेखांकित किया जाएगा; संरक्षित क्षेत्रों के लिए एक्सेसर्स को घोषित पैकेज और किसी भी व्युत्पन्न कक्षाओं में रेखांकित किया जाएगा; & सी।

रनटाइम पर, जेआईटी चल रहे कोड के विश्लेषण के आधार पर अतिरिक्त इनलाइनिंग करने की संभावना है।

+0

पर इनलाइन नहीं हो सकता है क्या गेटटर/सेटर की संख्या कितनी बार प्रभावित होती है, संभवतः जेआईटी इसे इनलाइन करने पर विचार करेगी? जावा में 'इनलाइन' (सी ++) कीवर्ड के समान कुछ है, जो एक विधि को रेखांकित करने की सिफारिश करता है? – Acidic

+0

हां, उपयोग रनटाइम पर जेआईटी के लिए एक कारक है। लेकिन संकलक देने के लिए कोई स्पष्ट इनलाइन संकेत नहीं है। – erickson

+0

धन्यवाद। मैंने इसे पहली बार याद किया होगा - 'अंतिम एक्सेसर' से आपका क्या मतलब था? – Acidic