hprof

2011-10-16 4 views
6

का उपयोग कर लूप के लिए प्रोफाइलिंग स्केल सड़क पर शब्द यह है कि लूप के दौरान स्केल में लूप धीमे होते हैं।hprof

धीरे:

for (i <- 0 until 10000) { 
    f(i) 
} 

फास्ट:

var i = 0 
while (i < 10000) { 
    f(i) 
    i += 1 
} 

मैं HPROF का उपयोग कैसे करूँ बताने के लिए छोरों के लिए मेरे कोड में टोंटी हैं या नहीं? मैं -agentlib:hprof=cpu=samples का उपयोग करके अपना कोड प्रोफाइल कर रहा हूं, "सीपीयू नमूने" अनुभाग में विधि क्या होगी?

मैं जानना चाहता हूं कि मेरे अनुकूलन प्रयासों को कहां केंद्रित करना है। लूप के लिए बाधाएं हैं?

उत्तर

3

मुझे लगता है कि आपको yourkit या visualvm जैसे प्रोफ़ाइल के साथ विशेष रूप से टूल के साथ अधिक भाग्य हो सकता है।

वे आमतौर पर सीपीयू नमूना कैप्चर करने के लिए इंटरफेस रखते हैं और फिर यह देखने के लिए नीचे ड्रिल करते हैं कि अधिकांश सीपीयू चक्रों का क्या खपत होता है।

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

2

प्रत्येक पाश को अपनी विधि में रखें, फिर विधियों द्वारा किए गए समय की तुलना करें। और वास्तव में कुछ समय लेने के लिए पर्याप्त पुनरावृत्तियों का उपयोग करें (या उन्हें किसी अन्य लूप में लपेटें)। 10000 पुनरावृत्तियों को माइक्रोसॉन्ड लेना चाहिए; मापने के लिए एक प्रोफाइलर के लिए मुश्किल है। एक अरब (या 10k पुनरावृत्तियों के 100k iteratons) आज़माएं।

इसके अलावा, यदि f(i) महंगा है, तो लूप की तुलना में कहीं अधिक समय लगेगा। इसके अलावा, अगर f(i) वास्तव में कुछ भी नहीं करता है, तो यह पूरी तरह से अनुकूलित हो सकता है। तो सुनिश्चित करें कि यह करता है (उदा। कहीं काउंटर अपडेट करें, एक योग की गणना करें, या कुछ)।

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