2011-06-21 8 views
6

के लिए कचरा संग्रहण उपकरण मैं दल्विक वीएम का वाद्य यंत्र कर रहा हूं और जानना चाहता हूं कि दल्विक में कचरा संग्रह का विश्लेषण करने के लिए कोई उपकरण है या नहीं। मुझे आवंटन ट्रैकर के बारे में पता है लेकिन मैं कुछ और विस्तृत खोज रहा हूं।दल्विक

+0

मुझे लगता है कि डीडीएमएस आपकी मदद करेगा। –

+0

आप किस समस्या को हल करने की कोशिश कर रहे हैं? –

+0

मैं अपने डिवाइस पर एक पृष्ठभूमि सेवा चला रहा हूं जो वेब ट्रैफ़िक को छूता है और डिवाइस पर अन्य वेब ऐप्स के लिए प्रॉक्सी के रूप में कार्य करता है। मेरी समस्या कचरा कलेक्टर अचानक सामान्य निष्पादन से अधिक समय लेता है। इससे पृष्ठभूमि सेवा बंद हो जाती है जो बदले में एप्लिकेशन के लिए सुस्त वेब प्रतिक्रिया की ओर ले जाती है। मैं कचरा कलेक्टर के इस अचानक व्यवहार को देखने की कोशिश कर रहा हूं। – 22kar

उत्तर

0

समय के साथ सभी जीसी संचालन का एक लॉग प्राप्त करें:

हर बार एक जीसी जगह लेता है, तो आप अपने LogCat में एक लाइन मिलता है।

08-08 16:42:21.998: D/dalvikvm(26942): GC_CONCURRENT freed 773K, 26% free 4739K/6368K, paused 4ms+3ms, total 92ms 
08-08 16:42:21.998: D/dalvikvm(26942): WAIT_FOR_CONCURRENT_GC blocked 11ms 

ऐसा लगता है कि मैं अपने डिवाइस पर सभी ऐप्स के लिए उनको प्राप्त कर रहा हूं।

इस लाइन में जीसी के बारे में बहुत सारे दिलचस्प आंकड़े शामिल हैं जैसे कि स्मृति मुक्त की मात्रा, जीसी ने कितना समय लिया, जब वास्तव में ऐसा हुआ और आपके ढेर का आकार (उपयोग/कुल)।

चूंकि उन सभी लॉग लाइनों में टैग dalvikvm है, तो आप उन्हें लंबे समय तक एकत्र और फ़िल्टर करने में सक्षम होना चाहिए और जीसी व्यवहार के बारे में जानने के लिए विश्लेषण करना चाहिए।

जीसी के एक विशिष्ट रन का विश्लेषण:

आप विश्लेषण करने के लिए क्या एक विशिष्ट जीसी आपरेशन में होता है चाहते हैं, इस काम के लिए सबसे अच्छा उपकरण ग्रहण मेट है। ग्रहण मैट ढेर डंप पार्स कर सकते हैं। एक हीप स्नैपशॉट लें, जीसी के लिए प्रतीक्षा करें (या डीडीएमएस का उपयोग करके इसे स्वयं ट्रिगर करें), और फिर एक और स्नैपशॉट लें।

ग्रहण MAT आपको दो स्नैपशॉट्स के बीच डेल्टा दिखा सकता है। ध्यान दें कि आप दोनों नए आवंटन और जीसी-कारणों को हटाएंगे। स्नैपशॉट की तुलना करने के बारे में अधिक जानकारी available here है।

कुछ अन्य विचार:

मुझे यकीन है कि आप कितना जीसी प्रक्रिया का विश्लेषण करने से जानने के लिए सक्षम हो जाएगा नहीं कर रहा हूँ। जीसी की आंतरिक कार्यप्रणाली एक कार्यान्वयन विस्तार है। यह ओएस संस्करण/डिवाइस/विन्यास के बीच नोटिस के बिना बदल सकता है।

मैं जीसी विलंबता को बेहतर बनाने के तरीकों के बारे में सोचने की कोशिश कर रहा हूं .. ऐसा लगता है कि जीसी आमतौर पर स्मृति की स्थिति कम होने पर चलती है। यह संभवतः नए आवंटन के दौरान होता है, इसलिए आपकी सेवा सक्रिय होने पर जीसी चल रहा है। शायद, यदि आप उस समय का उपयोग करते हैं जब आपकी सेवा मैन्युअल रूप से जीसी के लिए निष्क्रिय है, तो आप वेब अनुरोध का जवाब देने के महत्वपूर्ण पथ में जीसी की संख्या को कम करने में सक्षम होंगे। कोशिश करने के लिए, मैं एक साधारण पृष्ठभूमि टाइमर जोड़ूंगा, और जब भी मेरी सेवा सक्रिय हो जाए तब इसे रीसेट करें (नया अनुरोध)। जब टाइमर टिकता है (कुछ समय के लिए निष्क्रियता), तो मैं मैन्युअल रूप से System.gc() चलाऊंगा।