2013-05-18 4 views
12

मैं jprofiler का व्यापक रूप से उपयोग करता हूं और यह एक अच्छा टूल है लेकिन मुझे आश्चर्य है कि जेप्रोफाइलर जेआईटी संकलन के प्रभावों को संभालने का तरीका है।जेपीआरफ़ाइलर जेआईटी को कैसे संभाला जा रहा है?

क्या मैं उदाहरण के लिए विधि को रेखांकित करने में सक्षम हूं? यदि कोई विधि रेखांकित है, तो यह स्नैपशॉट में बिल्कुल दिखाई नहीं देगी या jProfiler अभी भी इसके निष्पादन समय की गणना करने में सक्षम है?

इसी प्रकार, कोई विधि जिसका कोई दुष्प्रभाव नहीं है और पूरी तरह से अनुकूलित किया जा सकता है jProfiler में भी नहीं दिखाया जाएगा। क्या ये सही है?

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

उत्तर

6

मैं जेपीआरओफ़ाइलर का व्यापक रूप से उपयोग करता हूं और यह एक अच्छा उपकरण है, लेकिन मुझे आश्चर्य है कि जेपीआरफ़ाइलर जेआईटी संकलन के प्रभावों को कैसे संभालने वाला है।

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

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

क्या मैं उदाहरण विधि के लिए निरीक्षण करने में सक्षम हूं? यदि कोई विधि रेखांकित है, तो यह स्नैपशॉट में बिल्कुल दिखाई नहीं देगी या jProfiler अभी भी इसके निष्पादन समय की गणना करने में सक्षम है?

जेपीरोफाइलर रिपोर्ट नहीं करेगा कि कौन सी विधियों को रेखांकित किया गया है; हालांकि, यह खुशी से उनके आविष्कार की रिपोर्ट करेगा, भले ही कंपाइलर उन्हें किसी अन्य विधि में इनलाइन रखे।

कैसे? खैर, संकलन के दौरान, संकलक मूल कोड में विधि सीमाओं को demarcs। जब कोई अपवाद या त्रुटि होती है तो JVM के लिए एक स्टैक ट्रेस का पुनर्निर्माण करने में सक्षम होना आवश्यक है। जब JVM नमूना होता है, तो JVM निष्पादन थ्रेड के स्टैक निशान के साथ प्रतिक्रिया करता है, और इसलिए वर्तमान विधि को सटीक रूप से रिपोर्ट किया जाता है, भले ही इसे रेखांकित किया गया हो।

इसी तरह, एक विधि जिसका कोई दुष्प्रभाव नहीं है और इसे पूरी तरह से अनुकूलित किया जा सकता है, जेपीआरओफ़ाइलर में भी नहीं दिखाया जाएगा। क्या ये सही है?

आप लगभग सही हैं। कोई साइड इफेक्ट्स या कंप्यूटेड रिटर्न वैल्यू वाला कोई तरीका या संभव साइड इफेक्ट के साथ किसी अन्य विधि को कॉल करने के लिए लगभग पूरी तरह अनुकूलित किया गया है, लेकिन जेवीएम में एक जीवाश्म अवशेष है जो रिकॉर्ड करता है कि विधि को कॉल किया गया है।सीमांत भूमि के ऊपर बहुत छोटा है, लेकिन निम्न दिलचस्प विशेषताएं हैं:

  1. जब नमूना, यह अत्यधिक संभावना नहीं है कि इस विधि कभी नमूने के पल में ढेर पर होगा, तो सबसे अधिक संभावना नहीं किया जाएगा जेप्रोफाइलर (या अन्य नमूना प्रोफाइलर्स) द्वारा पता चला।
  2. उपकरण उपकरण, प्रोफाइलर सभी विधि कॉल का निशान देता है और विधि कॉल का पता लगाएगा। उपरोक्त वर्णित कुल लागत, छोटी रूप से छोटी होगी।

नमूना बनाम उपकरण में अंतर this article में समझाया गया है।

+0

महान उत्तर, ठीक वही जो मैं खोज रहा था। मैं ज्यादातर समय वाद्य यंत्र कर रहा हूं इसलिए यह जानना उपयोगी है कि प्रोफाइलर सभी विधि कॉल दिखाएगा। –

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