2010-12-27 16 views
5

मैं एंड्रॉइड पर एक एप्लीकेशन विकसित कर रहा हूं। यह एक लंबा चल रहा एप्लिकेशन है जो लगातार सेंसर डेटा को संसाधित करता है। एप्लिकेशन चलाने के दौरान मुझे लॉगकैट में बहुत सारे जीसी संदेश दिखाई देते हैं; हर दूसरे के बारे में।Dalvik जीसी व्यवहार का विश्लेषण कैसे करें?

यह शायद ऑब्जेक्ट्स बनने और लूप में तुरंत संदर्भित होने के कारण होता है।

मुझे कैसे पता चलेगा कि कौन से ऑब्जेक्ट्स बनाए जा रहे हैं और तुरंत जारी किए गए हैं?

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

(*) मैंने jcat और Eclipse MAT की कोशिश की। एंड्रॉइड हीप-डंप पर काम करने के लिए मुझे hat नहीं मिल सका; यह एक असमर्थित डंप फ़ाइल संस्करण की शिकायत की।

उत्तर

4

मुझे कैसे पता चलेगा कि कौन से ऑब्जेक्ट्स बनाए जा रहे हैं और तुरंत जारी किए गए हैं?

चरण # 1: अस्थायी रूप से अपने कोड को संशोधित करें (या अपने कोड के प्रासंगिक हिस्सों के साथ एक स्क्रैप प्रोजेक्ट बनाएं), जहां आप सेंसर प्रोसेसिंग तर्क के माध्यम से एक बार चलाने के लिए बटन या कुछ क्लिक कर सकते हैं।

चरण # 2: डीडीएमएस (स्टैंडअलोन या ग्रहण परिप्रेक्ष्य) में जाएं।

चरण # 3: अपने एमुलेटर चुनें, फिर आवंटन ट्रैकर टैब पर क्लिक करें

# चरण 4: बिंदु जहां यह क्लिक चरण # 1 से बटन के लिए इंतज़ार कर रहा है करने के लिए अपने आवेदन में पाएं, फिर प्रारंभ पर क्लिक करें डीडीएमएस आवंटन ट्रैकर टैब में ट्रैकिंग।

चरण # 4: बटन पर क्लिक करें, और जब सेंसर प्रोसेसिंग पास पूरा हो जाए, तो डीडीएमएस आवंटन ट्रैकर टैब पर आवंटन प्राप्त करें पर क्लिक करें।

यह आपको बताएगा कि आपके कोड के उस हिस्से के दौरान आवंटित किया गया था। यह आपको नहीं बताता कि "जारी" क्या है, क्योंकि जीसी चक्र चलने तक यह अनिश्चित है।

संपादित

मैं निश्चित नहीं हूँ, लेकिन startAllocCounting()android.os.Debug वर्ग पर ट्रैक करना शुरू बटन पर क्लिक के रूप में एक ही प्रभाव हो सकता है। यदि ऐसा है, तो आप उपरोक्त उल्लिखित कोड परिवर्तनों के साथ गड़बड़ की बजाय, अपने लूप के एक पास पर आवंटन को ट्रैक करने के लिए बस अपने कोड का उपयोग कर सकते हैं।

और, एफडब्ल्यूआईडब्ल्यू, here is a short technical article डीडीएमएस और आवंटन ट्रैकिंग पर।

+1

डबल तैनात: \ क्यों कोड बदले बिना आवंटन पर नजर नहीं चल रहा है?(कम से कम पहली बार) –

+1

@ पेड्रो लोरेरो: सबसे पहले, आप प्रश्न में लूप के बाहर बहुत सारे आवंटन के साथ हवाएं करते हैं, और आवंटन सूची वास्तव में लंबी हो सकती है। दूसरा, लूप स्वयं सूची को प्रबंधित करने के लिए असंभव रूप से लंबा बना सकता है। कोड के प्रासंगिक सेगमेंट पर एक पास अलग करने से डेटा को समझना सबसे आसान हो जाएगा। हालांकि, आपकी टिप्पणी ने मुझे कुछ याद दिलाया, कि मैं अपने जवाब में क्षणिक रूप से जोड़ रहा हूं ... – CommonsWare

+0

ऑलोकेशन ट्रैकर के सूचक के लिए धन्यवाद। पूरी तरह से इसे याद किया था। बीटीडब्ल्यू, डॉक्टर कहते हैं कि यह ग्रहण एकीकरण (एडीटी) – HRJ

1

मैं तुम्हें (अपने/उपकरण निर्देशिका में) आवंटन ट्रैकर एक कोशिश :)

देने के लिए की जरूरत है

http://developer.android.com/resources/articles/track-mem.html

+0

आह धन्यवाद! मैंने आवंटन ट्रैकर को याद किया था क्योंकि यह स्पष्ट रूप से ग्रहण एकीकरण में उपलब्ध नहीं है। – HRJ

+1

अब यह रिकॉर्ड के लिए है :) – manmal

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