एंड्रॉइड रनटाइम (एआरटी) एंड्रॉइड पर एप्लिकेशन और कुछ सिस्टम सेवाओं द्वारा उपयोग किया जाने वाला प्रबंधित रनटाइम है। ART और इसके पूर्ववर्ती Dalvik मूल रूप से Android प्रोजेक्ट के लिए विशेष रूप से बनाए गए थे। रनटाइम के रूप में एआरटी दल्विक निष्पादन योग्य प्रारूप और डेक्स बाइटकोड विनिर्देश निष्पादित करता है।
ART और Dalvik, Dex बाइटकोड चलाने वाले संगत रनटाइम हैं, इसलिए Dalvik के लिए विकसित ऐप्स ART के साथ चलते समय काम करना चाहिए। हालांकि, दलविक पर काम करने वाली कुछ तकनीकें एआरटी पर काम नहीं करती हैं। सबसे महत्वपूर्ण मुद्दों के बारे में जानकारी के लिए, एंड्रॉइड रनटाइम (एआरटी) पर ऐप व्यवहार सत्यापित करना देखें।
एआरटी विशेषताएं
एआरटी द्वारा कार्यान्वित कुछ प्रमुख विशेषताएं यहां दी गई हैं।
समय से पहले (एओटी) संकलन
एआरटी समय से पहले (एओटी) संकलन पेश करता है, जो ऐप के प्रदर्शन में सुधार कर सकता है। एआरटी में दल्विक की तुलना में सख्त इंस्टाल-टाइम सत्यापन भी है।
इंस्टॉल समय पर, ART ऑन-डिवाइस dex2oat टूल का उपयोग करके ऐप्स को संकलित करता है। यह उपयोगिता DEX फ़ाइलों को इनपुट के रूप में स्वीकार करती है और लक्ष्य डिवाइस के लिए एक संकलित ऐप निष्पादन योग्य बनाती है। उपयोगिता बिना किसी कठिनाई के सभी मान्य DEX फ़ाइलों को संकलित करने में सक्षम होनी चाहिए। हालाँकि, कुछ पोस्ट-प्रोसेसिंग टूल अमान्य फ़ाइलें उत्पन्न करते हैं जिन्हें Dalvik द्वारा सहन किया जा सकता है लेकिन ART द्वारा संकलित नहीं किया जा सकता है। अधिक जानकारी के लिए, कचरा संग्रहण मुद्दों को संबोधित करना देखें।
बेहतर कचरा संग्रहण
कचरा संग्रह (जीसी) बहुत संसाधन गहन है, जो ऐप के प्रदर्शन को खराब कर सकता है, जिसके परिणामस्वरूप खराब प्रदर्शन, खराब यूआई प्रतिक्रिया और अन्य समस्याएं हो सकती हैं। ART कई तरह से कचरा संग्रहण में सुधार करता है:
- एकल GC ठहराव के साथ अधिकतर समवर्ती डिज़ाइन
- पृष्ठभूमि स्मृति उपयोग और विखंडन को कम करने के लिए समवर्ती प्रतिलिपि
- जीसी ठहराव की लंबाई ढेर के आकार से स्वतंत्र है
- हाल ही में आवंटित, अल्पकालिक वस्तुओं की सफाई के विशेष मामले के लिए कम कुल जीसी समय के साथ कलेक्टर
- बेहतर कचरा संग्रहण एर्गोनॉमिक्स, समवर्ती कचरा संग्रह को अधिक समय पर बनाना, जो
GC_FOR_ALLOC
घटनाओं को विशिष्ट उपयोग के मामलों में अत्यंत दुर्लभ बनाता है
विकास और डिबगिंग सुधार
ART ऐप डेवलपमेंट और डिबगिंग को बेहतर बनाने के लिए कई सुविधाएँ प्रदान करता है।
नमूना प्रोफाइलर के लिए समर्थन
ऐतिहासिक रूप से, डेवलपर्स ने एक प्रोफाइलर के रूप में ट्रेसव्यू टूल (एप्लिकेशन निष्पादन को ट्रेस करने के लिए डिज़ाइन किया गया) का उपयोग किया है। जबकि ट्रेसव्यू उपयोगी जानकारी देता है, दल्विक पर इसके परिणाम प्रति-विधि-कॉल ओवरहेड द्वारा तिरछे किए गए हैं, और उपकरण का उपयोग रन टाइम प्रदर्शन को विशेष रूप से प्रभावित करता है।
एआरटी एक समर्पित नमूना प्रोफाइलर के लिए समर्थन जोड़ता है जिसमें ये सीमाएं नहीं हैं। यह महत्वपूर्ण मंदी के बिना ऐप निष्पादन का अधिक सटीक दृश्य देता है। किटकैट रिलीज में दल्विक के लिए ट्रेसव्यू में नमूनाकरण समर्थन जोड़ा गया था।
अधिक डिबगिंग सुविधाओं के लिए समर्थन
एआरटी कई नए डिबगिंग विकल्पों का समर्थन करता है, विशेष रूप से मॉनिटर- और कचरा संग्रहण-संबंधित कार्यक्षमता में। उदाहरण के लिए, आप कर सकते हैं:
- देखें कि स्टैक ट्रेस में कौन से ताले हैं, फिर लॉक रखने वाले धागे पर जाएं।
- पूछें कि किसी दिए गए वर्ग के कितने जीवित उदाहरण हैं, उदाहरणों को देखने के लिए कहें, और देखें कि कौन से संदर्भ किसी वस्तु को जीवित रख रहे हैं।
- किसी विशिष्ट उदाहरण के लिए ईवेंट (जैसे ब्रेकपॉइंट) फ़िल्टर करें।
- बाहर निकलने पर विधि द्वारा लौटाया गया मान देखें ("विधि-निकास" ईवेंट का उपयोग करके)।
- जब कोई विशिष्ट फ़ील्ड एक्सेस किया जाता है और/या संशोधित किया जाता है, तो प्रोग्राम के निष्पादन को निलंबित करने के लिए फ़ील्ड वॉचपॉइंट सेट करें।
अपवादों और क्रैश रिपोर्ट में बेहतर नैदानिक विवरण
रनटाइम अपवाद होने पर एआरटी आपको अधिक से अधिक संदर्भ और विवरण देता है। ART java.lang.ClassCastException
, java.lang.ClassNotFoundException
, और java.lang.NullPointerException
के लिए विस्तृत अपवाद विवरण प्रदान करता है। (Dalvik के बाद के संस्करणों ने java.lang.ArrayIndexOutOfBoundsException
और java.lang.ArrayStoreException
के लिए विस्तारित अपवाद विवरण प्रदान किया, जिसमें अब सरणी का आकार और आउट-ऑफ-बाउंड ऑफ़सेट शामिल है, और ART भी ऐसा करता है।)
उदाहरण के लिए, java.lang.NullPointerException
अब इस बारे में जानकारी दिखाता है कि ऐप नल पॉइंटर के साथ क्या करने की कोशिश कर रहा था, जैसे कि ऐप जिस फ़ील्ड को लिखने का प्रयास कर रहा था, या वह तरीका जिसे वह कॉल करने का प्रयास कर रहा था। यहाँ कुछ विशिष्ट उदाहरण दिए गए हैं:
java.lang.NullPointerException: Attempt to write to field 'int android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
ART जावा और नेटिव स्टैक जानकारी दोनों को शामिल करके ऐप नेटिव क्रैश रिपोर्ट में बेहतर संदर्भ जानकारी भी प्रदान करता है।
रिपोर्टिंग समस्याएं
यदि आप ऐसी किसी भी समस्या का सामना करते हैं जो ऐप जेएनआई समस्याओं के कारण नहीं है, तो उन्हें एंड्रॉइड ओपन सोर्स प्रोजेक्ट इश्यू ट्रैकर के माध्यम से रिपोर्ट करें। यदि उपलब्ध हो तो Google Play store में adb bugreport
और ऐप का लिंक शामिल करें। अन्यथा, यदि संभव हो, तो ऐसा APK अनुलग्न करें जो समस्या को पुन: उत्पन्न करता है।