2010-01-17 10 views
7

मैं simple text markup Java Library पर काम कर रहा हूं जो अन्य आवश्यकताओं के साथ, तेज़ी से होना चाहिए।जावा प्रोफाइलिंग - यह मान कितने विश्वसनीय हैं?

उस उद्देश्य के लिए, मैंने कुछ प्रोफाइलिंग किया, लेकिन परिणाम मुझे खराब संख्याएं देते हैं जिन्हें तब गैर-प्रोफ़ाइल मोड में चलते समय मापा जाता है।

तो मेरा सवाल है - प्रोफाइलिंग कितना विश्वसनीय है? क्या यह विधियों में बिताए गए समय का केवल एक सूचनात्मक अनुपात देता है? क्या वह जेआईटी कंपाइलर को ध्यान में रखता है, या केवल प्रोफाइलिंग मोड का अर्थ है? मैं NetBeans प्रोफाइलर और सूर्य जेडीके 1.6 का उपयोग करता हूं।

धन्यवाद।

उत्तर

5

प्रोफाइलिंग करते समय, आप हमेशा एक प्रदर्शन जुर्माना लगाएंगे क्योंकि कुछ तरीकों के प्रारंभ/बंद समय को मापने के लिए, ढेर की वस्तुओं (स्मृति प्रोफाइलिंग के लिए) का ट्रैक रखें, इसलिए प्रबंधन ओवरहेड है ।

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

तरीकों कि बहुत छोटे होते हैं के साथ

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

उम्मीद है कि मदद करता है।

2

औसत पर उपकरण प्रोफाइल प्रोफाइल के कारण गैर-प्रोफाइल कोड से धीमी गति से चलेंगे। मापने की गति हालांकि प्रोफाइलिंग का उद्देश्य नहीं है।

प्रोफाइलिंग आउटपुट आपको बाधाओं के बारे में बताएगा, जो थ्रेड्स अधिक समय बिताते हैं, कोड जो अपेक्षा से भी बदतर व्यवहार करता है, या संभावित मेमोरी लीक होता है।

आप उन संकेतों का उपयोग तब तक कर सकते हैं जब तक कि आप परिणामों से खुश न हों, तब तक उन तरीकों और प्रोफ़ाइल को बेहतर बनाने के लिए उपयोग करें।

एक प्रोफाइलर एक कोडन शैली है कि है x% इष्टतम की तुलना में धीमी लेकिन के लिए एक समाधान नहीं होगा, आप अभी भी अपने कोड है कि दूसरों की तुलना में अधिक बार उपयोग किया जाता है के उन हिस्सों को परिष्कृत करके समय बिताने की जरूरत।

2

मैं इस तथ्य से हैरान नहीं हूं कि आपके आवेदन को प्रोफाइल करने के दौरान आपको सबसे खराब परिणाम मिलते हैं क्योंकि जावा कोड उपकरण आमतौर पर हमेशा इसके निष्पादन को धीमा कर देगा। यह वास्तव में अच्छी तरह से Profiling जो कहा गया है कि संभवतः गलत गलत परिणाम और heisenbugs (the observer effect के कारण के कारण एक कार्यक्रम के प्रदर्शन में परिवर्तन का कारण बनता है इंस्ट्रूमेंटेशन कर सकते हैं, पर विकिपीडिया पृष्ठ द्वारा कब्जा कर लिया गया है: पर्यवेक्षकों को प्रभावित है कि वे क्या, देख रहे हैं मात्र से इसे अकेले देखने का कार्य)।

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

2

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

1

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

1

मुझे लगता है मैं मिल पाया है मैं किस प्रोफाइलर का उपयोग करता हूं इसके आधार पर अलग-अलग परिणाम। हालांकि परिणाम अक्सर वैध होते हैं, लेकिन समस्या पर एक अलग परिप्रेक्ष्य। सीपीयू उपयोग प्रोफाइलिंग करते समय मैं अक्सर कुछ करता हूं स्मृति आवंटन प्रोफाइलिंग को सक्षम करना है। यह अक्सर मुझे अलग-अलग CPU परिणाम देता है (मेमोरी प्रोफाइलिंग के कारण बढ़े हुए ओवरहेड के कारण) और मुझे ऑप्टिमाइज़ करने के लिए कुछ उपयोगी स्थान दे सकते हैं।

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