2012-04-09 15 views
14

जावा जेआईटी एक विधि कॉल इनलाइन करता है? क्या यह # टाइम्स पर आधारित है जिसे कॉलर विधि कहा जाता है (यदि हां, वह संख्या क्या होगी?), या कुछ अन्य मानदंड (और वह क्या होगा?)जावा: जेआईटी विधि

मैंने पढ़ा है कि जेआईटी 'अंतिम' विधियों, लेकिन यह रनटाइम आंकड़ों के आधार पर nonfinal विधियों को भी रेखांकित करता है, इसलिए जानना चाहते हैं कि ट्रिगरिंग मानदंड क्या है।

मुझे लगता है कि उत्तर JVM कार्यान्वयन के आधार पर भिन्न होंगे, लेकिन शायद उन सभी में कुछ आम है?

+1

कोई आसान जवाब लेकिन कुछ लिंक है कि मदद कर सकता है - http://www.azulsystems.com/blog/cliff/2011-04-04-fixing-the-inlining-problem https: // विकिज़ .oracle.com/display/HotSpotInternals/इनलाइनिंग https://wikis.oracle.com/display/HotSpotInternals/PerformanceTechniques – Matt

+0

कुछ हद तक संबंधित आलेख http://www.ibm.com/developerworks/java/library/j-jtp1029/index .html –

उत्तर

16

जब भी यह चाहें संक्षिप्त उत्तर होता है।

अक्सर जेआईटीसी किसी भी आंकड़े एकत्र किए बिना स्वचालित रूप से छोटे अंतिम या छद्म-अंतिम तरीकों को रेखांकित करेगा। ऐसा इसलिए है क्योंकि यह देखना आसान है कि इनलाइनिंग वास्तव में कॉल को कोड बनाकर कोड बाइट्स बचाती है (या कम से कम यह लगभग "धो" है)।

वास्तव में गैर-अंतिम तरीकों को रेखांकित करना आम तौर पर तब तक नहीं किया जाता है जब तक आंकड़े सुझाव नहीं देते हैं, क्योंकि अनपेक्षित सबक्लास किसी भी तरह से अप्रत्याशित उप-वर्ग के मामले में "संरक्षित" होना चाहिए।

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

+0

क्या 'छोटा' # लाइनों पर निर्भर करता है? यदि हां, आम तौर पर कितने 'छोटे' का मतलब होगा? – shrini1000

+4

लाइनों की संख्या नहीं। इसके बजाय, जेनरेट कोड के बाइट्स की अनुमानित संख्या (हालांकि अनुमान काफी कच्चा हो सकता है)। एक जेआईटीसी "लाइन" नहीं देखता है, बल्कि "बाइटकोड" देखता है। –

+2

और जब एक बड़ी विधि JITCing, एक जेआईटीसी आम तौर पर जेनरेट आकार के लिए "बजट" होगा, और जब तक कि "बजट" भर नहीं जाता है तब तक सामानों को इनलाइन तक ले जाएगा। –

2

आमतौर पर जेआईटी डिफ़ॉल्ट रूप से केवल "छोटे" तरीकों को रेखांकित करता है। इसके अलावा यह कार्यान्वयन पर पूरी तरह से निर्भर है।

+0

क्या 'छोटा' # लाइनों पर निर्भर करता है? यदि हां, आम तौर पर कितने 'छोटे' का मतलब होगा? – shrini1000

7

सर्वर चलाने वाले एक JVM के लिए डिफ़ॉल्ट इनलाइन थ्रेसहोल्ड हॉटस्पॉट कंपाइलर 35 बाइटकोड है।

Official docs

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