एंड्रॉइड रनटाइम और डाल्विक

एंड्रॉइड रनटाइम (एआरटी) एंड्रॉइड पर ऐप्स और कुछ सिस्टम सेवाओं द्वारा उपयोग किया जाने वाला प्रबंधित रनटाइम है। एआरटी और इसके पूर्ववर्ती दल्विक को मूल रूप से विशेष रूप से एंड्रॉइड प्रोजेक्ट के लिए बनाया गया था। रनटाइम के रूप में एआरटी डेलविक निष्पादन योग्य (DEX) प्रारूप और DEX बाइटकोड विनिर्देशन को निष्पादित करता है।

एआरटी और डाल्विक DEX बाइटकोड चलाने वाले संगत रनटाइम हैं, इसलिए एआरटी के साथ चलते समय डाल्विक के लिए विकसित ऐप्स को काम करना चाहिए। हालाँकि, कुछ तकनीकें जो डाल्विक पर काम करती हैं, एआरटी पर काम नहीं करती हैं। सबसे महत्वपूर्ण मुद्दों के बारे में जानकारी के लिए, एंड्रॉइड रनटाइम (एआरटी) पर ऐप व्यवहार को सत्यापित करना देखें।

एआरटी सुविधाएँ

यहां एआरटी द्वारा कार्यान्वित कुछ प्रमुख विशेषताएं दी गई हैं।

समय से पहले (एओटी) संकलन

एआरटी समय से पहले (एओटी) संकलन पेश करता है, जो ऐप के प्रदर्शन में सुधार कर सकता है। एआरटी में डाल्विक की तुलना में इंस्टॉल-टाइम सत्यापन भी सख्त है।

इंस्टॉल के समय, एआरटी ऑन-डिवाइस dex2oat टूल का उपयोग करके ऐप्स को संकलित करता है। यह उपयोगिता DEX फ़ाइलों को इनपुट के रूप में स्वीकार करती है और लक्ष्य डिवाइस के लिए एक संकलित ऐप निष्पादन योग्य बनाती है। उपयोगिता बिना किसी कठिनाई के सभी वैध DEX फ़ाइलों को संकलित करने में सक्षम होनी चाहिए। हालाँकि, कुछ पोस्ट-प्रोसेसिंग उपकरण अमान्य फ़ाइलें उत्पन्न करते हैं जिन्हें डाल्विक द्वारा सहन किया जा सकता है लेकिन एआरटी द्वारा संकलित नहीं किया जा सकता है। अधिक जानकारी के लिए, कचरा संग्रहण मुद्दों का समाधान देखें।

बेहतर कचरा संग्रहण

कचरा संग्रहण (जीसी) बहुत संसाधन गहन है, जो किसी ऐप के प्रदर्शन को ख़राब कर सकता है, जिसके परिणामस्वरूप खराब प्रदर्शन, खराब यूआई प्रतिक्रिया और अन्य समस्याएं हो सकती हैं। एआरटी कई तरीकों से कचरा संग्रहण में सुधार करता है:

  • एकल जीसी ठहराव के साथ अधिकतर समवर्ती डिज़ाइन
  • पृष्ठभूमि स्मृति उपयोग और विखंडन को कम करने के लिए समवर्ती प्रतिलिपि
  • जीसी ठहराव की लंबाई ढेर के आकार से स्वतंत्र है
  • हाल ही में आवंटित, अल्पकालिक वस्तुओं की सफाई के विशेष मामले के लिए कम कुल जीसी समय वाला कलेक्टर
  • कचरा संग्रहण एर्गोनॉमिक्स में सुधार, समवर्ती कचरा संग्रह को अधिक समय पर बनाना, जो सामान्य उपयोग के मामलों में GC_FOR_ALLOC घटनाओं को अत्यंत दुर्लभ बनाता है

विकास और डिबगिंग सुधार

एआरटी ऐप विकास और डिबगिंग को बेहतर बनाने के लिए कई सुविधाएँ प्रदान करता है।

सैंपलिंग प्रोफाइलर के लिए समर्थन

ऐतिहासिक रूप से, डेवलपर्स ने प्रोफाइलर के रूप में ट्रेसव्यू टूल (ऐप निष्पादन का पता लगाने के लिए डिज़ाइन किया गया) का उपयोग किया है। जबकि ट्रेसव्यू उपयोगी जानकारी देता है, डाल्विक पर इसके परिणाम प्रति-विधि-कॉल ओवरहेड के कारण खराब हो गए हैं, और टूल का उपयोग रन टाइम प्रदर्शन को स्पष्ट रूप से प्रभावित करता है।

एआरटी एक समर्पित नमूना प्रोफाइलर के लिए समर्थन जोड़ता है जिसमें ये सीमाएँ नहीं हैं। यह महत्वपूर्ण मंदी के बिना ऐप निष्पादन का अधिक सटीक दृश्य देता है। किटकैट रिलीज में दल्विक के लिए ट्रेसव्यू में सैंपलिंग समर्थन जोड़ा गया था।

अधिक डिबगिंग सुविधाओं के लिए समर्थन

एआरटी कई नए डिबगिंग विकल्पों का समर्थन करता है, विशेष रूप से मॉनिटर- और कचरा संग्रहण-संबंधित कार्यक्षमता में। उदाहरण के लिए, आप यह कर सकते हैं:

  • देखें कि स्टैक ट्रेस में कौन से ताले रखे गए हैं, फिर उस धागे पर जाएं जिसमें ताला लगा हुआ है।
  • पूछें कि किसी दिए गए वर्ग के कितने जीवित उदाहरण हैं, उदाहरणों को देखने के लिए कहें, और देखें कि कौन से संदर्भ किसी वस्तु को जीवित रख रहे हैं।
  • किसी विशिष्ट उदाहरण के लिए ईवेंट (जैसे ब्रेकप्वाइंट) फ़िल्टर करें।
  • किसी विधि द्वारा बाहर निकलने पर लौटाया गया मान देखें ("विधि-निकास" घटनाओं का उपयोग करके)।
  • किसी विशिष्ट फ़ील्ड तक पहुंचने और/या संशोधित होने पर प्रोग्राम के निष्पादन को निलंबित करने के लिए फ़ील्ड वॉचपॉइंट सेट करें।

अपवादों और क्रैश रिपोर्ट में बेहतर नैदानिक ​​विवरण

रनटाइम अपवाद होने पर एआरटी आपको यथासंभव अधिक संदर्भ और विवरण देता है। 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

एआरटी जावा और नेटिव स्टैक जानकारी दोनों को शामिल करके ऐप नेटिव क्रैश रिपोर्ट में बेहतर संदर्भ जानकारी भी प्रदान करता है।

समस्याओं की रिपोर्ट करें

यदि आप ऐसी किसी समस्या का सामना करते हैं जो ऐप जेएनआई समस्याओं के कारण नहीं है, तो उन्हें एंड्रॉइड ओपन सोर्स प्रोजेक्ट इश्यू ट्रैकर के माध्यम से रिपोर्ट करें। यदि उपलब्ध हो तो Google Play स्टोर में एक adb bugreport और ऐप का लिंक शामिल करें। अन्यथा, यदि संभव हो, तो एक एपीके संलग्न करें जो समस्या को पुन: उत्पन्न करता है।