एआरटी समय के हिसाब से कंपाइलर लागू करना

Android रनटाइम (ART) में कोड प्रोफ़ाइलिंग के साथ जस्ट-इन-टाइम (JIT) कंपाइलर शामिल होता है जो Android ऐप्लिकेशन के चलने के दौरान उनकी परफ़ॉर्मेंस को लगातार बेहतर बनाती है. जेआईटी कंपाइलर, एआरटी के मौजूदा आउट-ऑफ़-टाइम (एओटी) कंपाइलर और यह रनटाइम की परफ़ॉर्मेंस को बेहतर बनाता है, स्टोरेज के लिए बची जगह बचाने, और ऐप्लिकेशन की स्पीड बढ़ाने में मदद करता है. सिस्टम अपडेट. यह सिस्टम से बचते हुए, एओटी कंपाइलर पर भी काम करता है ऐप्लिकेशन के अपने-आप अपडेट होने या ऐप्लिकेशन को फिर से कंपाइल करने के दौरान, ट्रैफ़िक धीमा होने की सुविधा ओवर द एयर (ओटीए) अपडेट के दौरान.

हालांकि, JIT और AOT, एक जैसे ऑप्टिमाइज़ेशन के साथ एक ही कंपाइलर का इस्तेमाल करते हैं, हो सकता है कि जनरेट किया गया कोड एक जैसा न हो. JIT, रनटाइम टाइप का इस्तेमाल करती है के बारे में जानकारी, बेहतर इनलाइनिंग कर सकते हैं, और स्टैक रिप्लेसमेंट (ओएसआर) को बेहतर बनाते हैं कंपाइलेशन संभव है, जो एक-दूसरे से थोड़ा अलग कोड जनरेट करते हैं.

जेआईटी आर्किटेक्चर

जेआईटी आर्किटेक्चर अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
पहली इमेज. जेआईटी आर्किटेक्चर.

JIT कंपाइलेशन

JIT के कंपाइलेशन में ये गतिविधियां शामिल हैं:

प्रोफ़ाइल के निर्देशों के साथ कॉम्पिटिशन अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
दूसरी इमेज. प्रोफ़ाइल के हिसाब से कई वीडियो को एक साथ जोड़ना.
  1. उपयोगकर्ता ऐप्लिकेशन चलाता है. इसके बाद, .dex लोड करने के लिए एआरटी को ट्रिगर करता है फ़ाइल से लिए जाते हैं.
    • अगर .oat फ़ाइल (.dex के लिए AOT बाइनरी फ़ाइल) उपलब्ध होती है, तो ART इसका उपयोग सीधे करता है. हालांकि, .oat फ़ाइलें नियमित रूप से जनरेट किए जाते हैं, तो उनमें हमेशा कंपाइल किया गया कोड (AOT बाइनरी) नहीं होता है.
    • अगर .oat फ़ाइल में कंपाइल किया गया कोड नहीं है, तो ART चलता है JIT और इंटरप्रेटर की मदद से, .dex फ़ाइल को एक्ज़ीक्यूट करता है.
  2. JIT को ऐसे किसी भी ऐप्लिकेशन के लिए चालू किया जाता है जिसे speed कंपाइलेशन फ़िल्टर (जिसका कहना है कि "जितना हो सके उतना कंपाइल करें" "ऐप्लिकेशन से हटाया गया").
  3. JIT प्रोफ़ाइल के डेटा को ऐसी सिस्टम डायरेक्ट्री में मौजूद फ़ाइल में डंप किया जाता है जिसमें सिर्फ़ तो ऐप्लिकेशन उसे ऐक्सेस कर सकता है.
  4. एओटी कंपाइलेशन (dex2oat) डीमन, ड्राइव में उस फ़ाइल को पार्स करता है उसे वीडियो में जोड़कर बनाया गया हो.
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है जेआईटी डीमन
    तीसरी इमेज. जेआईटी डीमन गतिविधियां.

Google Play सेवा एक उदाहरण है, जिसका इस्तेमाल ऐसे ऐप्लिकेशन करते हैं जो शेयर की गई लाइब्रेरी जैसी ही होती हैं.

जेआईटी वर्कफ़्लो

जेआईटी आर्किटेक्चर अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
चौथी इमेज. JIT डेटा फ़्लो.
  • प्रोफ़ाइलिंग की जानकारी, कोड की कैश मेमोरी में सेव होती है और यह गै़र-ज़रूरी होती है मेमोरी दबाव में कलेक्शन करती है.
    • इस बात की कोई गारंटी नहीं है कि आवेदन जब बैकग्राउंड में पूरा डेटा होगा (यानी कि वह सारा डेटा जो JIT में शामिल था).
    • यह पक्का करने की कोई कोशिश नहीं है कि सब कुछ रिकॉर्ड किया गया है, क्योंकि इससे रनटाइम परफ़ॉर्मेंस).
  • तरीके, तीन अलग-अलग स्थितियों में हो सकते हैं:
    • इंटरप्रेटेड (डेक्स कोड)
    • JIT को कंपाइल किया गया
    • एओटी को कंपाइल किया गया
    अगर JIT और AOT, दोनों कोड मौजूद हैं (उदाहरण के लिए, बार-बार डी-ऑप्टिमाइज़ेशन की सुविधा चालू होने की वजह से), JITed कोड को प्राथमिकता दी जाती है.
  • फ़ोरग्राउंड ऐप्लिकेशन पर असर डाले बिना JIT चलाने के लिए, मेमोरी से जुड़ी ज़रूरी शर्त परफ़ॉर्मेंस, बताए गए ऐप्लिकेशन पर निर्भर करती है. बड़े ऐप्लिकेशन के लिए ज़्यादा मेमोरी की ज़रूरत होती है छोटे ऐप्लिकेशन से ज़्यादा. आम तौर पर, बड़े ऐप्लिकेशन करीब 4 एमबी तक स्टेबल रहते हैं.

JIT में लॉग इन करने की सुविधा चालू करें

JIT में लॉग इन करने की सुविधा चालू करने के लिए, इन निर्देशों का पालन करें:

adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start

JIT को बंद करें

JIT को बंद करने के लिए, इन निर्देशों का पालन करें:

adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start

ज़बरदस्ती कंपाइल करें

ज़बरदस्ती कंपाइल करने के लिए, इन्हें चलाएं:

adb shell cmd package compile

किसी खास पैकेज को फ़ोर्स कंपाइल करने के सामान्य इस्तेमाल के उदाहरण:

  • प्रोफ़ाइल आधारित:
    adb shell cmd package compile -m speed-profile -f my-package
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • पूरी जानकारी:
    adb shell cmd package compile -m speed -f my-package
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

सभी पैकेज को फ़ोर्स कंपाइल करने के सामान्य इस्तेमाल के उदाहरण:

  • प्रोफ़ाइल आधारित:
    adb shell cmd package compile -m speed-profile -f -a
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • पूरी जानकारी:
    adb shell cmd package compile -m speed -f -a
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

प्रोफ़ाइल का डेटा मिटाएं

Android 13 या इससे पहले के वर्शन पर

लोकल प्रोफ़ाइल का डेटा मिटाने और कंपाइल किए गए कोड को हटाने के लिए, यह तरीका अपनाएं:

adb shell pm compile --reset 

Android 14 या उसके बाद वाले वर्शन पर

सिर्फ़ डिवाइस पर मौजूद प्रोफ़ाइल का डेटा मिटाने के लिए:

adb shell pm art clear-app-profiles 

ध्यान दें: Android 13 के लिए दिए गए निर्देश के उलट या पहले, यह आदेश बाहरी प्रोफ़ाइल डेटा (`.dm`) को साफ़ नहीं करता, जो ऐप से इंस्टॉल किया गया है.

लोकल प्रोफ़ाइल डेटा मिटाने और लोकल प्रोफ़ाइल से जनरेट किए गए कंपाइल कोड को हटाने के लिए प्रोफ़ाइल डेटा (यानी, इंस्टॉल स्थिति पर रीसेट करने के लिए), इन्हें चलाएं:

adb shell pm compile --reset 

ध्यान दें: यह निर्देश इनसे जनरेट किए गए कंपाइल किए गए कोड को नहीं हटाता बाहरी प्रोफ़ाइल डेटा (`.dm`), जो ऐप्लिकेशन के साथ इंस्टॉल किया गया है.

कंपाइल किए गए सभी कोड मिटाने के लिए, यह निर्देश चलाएं:

adb shell cmd package compile -m verify -f 

ध्यान दें: इस निर्देश में लोकल प्रोफ़ाइल का डेटा सेव रहता है.