ঠিক সময়ে কম্পাইলার ART প্রয়োগ করুন

অ্যান্ড্রয়েড রানটাইম (এআরটি) কোড প্রোফাইলিং সহ একটি জাস্ট-ইন-টাইম (জেআইটি) কম্পাইলার অন্তর্ভুক্ত করে যা অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি চালানোর সাথে সাথে তাদের কর্মক্ষমতাকে ক্রমাগত উন্নত করে। JIT কম্পাইলারটি ART-এর বর্তমান আগ-অফ-টাইম (AOT) কম্পাইলারকে পরিপূরক করে এবং রানটাইম কর্মক্ষমতা উন্নত করে, স্টোরেজ স্পেস বাঁচায় এবং অ্যাপ্লিকেশন ও সিস্টেম আপডেটের গতি বাড়ায়। এটি স্বয়ংক্রিয় অ্যাপ্লিকেশন আপডেট বা ওভার-দ্য-এয়ার (OTA) আপডেটের সময় অ্যাপ্লিকেশনগুলির পুনঃসংকলনের সময় সিস্টেমের ধীরগতি এড়ানোর মাধ্যমে AOT কম্পাইলারের উন্নতি করে।

যদিও জেআইটি এবং এওটি অপ্টিমাইজেশনের অনুরূপ সেটের সাথে একই কম্পাইলার ব্যবহার করে, উত্পন্ন কোড অভিন্ন নাও হতে পারে। JIT রানটাইম টাইপ তথ্য ব্যবহার করে, আরও ভাল ইনলাইনিং করতে পারে এবং স্ট্যাক রিপ্লেসমেন্ট (OSR) সংকলনকে সম্ভব করে তোলে, যার সবগুলিই সামান্য ভিন্ন কোড তৈরি করে।

জেআইটি আর্কিটেকচার

জেআইটি আর্কিটেকচার
চিত্র 1. JIT আর্কিটেকচার।

JIT সংকলন

JIT সংকলন নিম্নলিখিত কার্যক্রম জড়িত:

প্রোফাইল-নির্দেশিত কম্প
চিত্র 2. প্রোফাইল-নির্দেশিত সংকলন।
  1. ব্যবহারকারী অ্যাপটি চালায়, যা তারপর .dex ফাইল লোড করতে ART কে ট্রিগার করে।
    • যদি .oat ফাইল ( .dex ফাইলের জন্য AOT বাইনারি) পাওয়া যায়, ART এটি সরাসরি ব্যবহার করে। যদিও .oat ফাইলগুলি নিয়মিত জেনারেট করা হয়, তবে তারা সবসময় কম্পাইল করা কোড (AOT বাইনারি) ধারণ করে না।
    • যদি .oat ফাইলে সংকলিত কোড না থাকে, ART .dex ফাইলটি চালানোর জন্য JIT এবং দোভাষীর মাধ্যমে চলে।
  2. speed সংকলন ফিল্টার (যা বলে "অ্যাপ থেকে যতটা সম্ভব কম্পাইল করুন") অনুযায়ী সংকলিত নয় এমন যেকোনো অ্যাপ্লিকেশনের জন্য JIT সক্ষম।
  3. JIT প্রোফাইল ডেটা একটি সিস্টেম ডিরেক্টরির একটি ফাইলে ডাম্প করা হয় যা শুধুমাত্র অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে।
  4. AOT কম্পাইলেশন ( dex2oat ) ডেমন সেই ফাইলটিকে কম্পাইলেশন চালানোর জন্য পার্স করে।

    JIT ডেমন
    চিত্র 3. JIT ডেমন কার্যক্রম।

Google Play পরিষেবা হল অন্যান্য অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি উদাহরণ যা শেয়ার করা লাইব্রেরির মতো আচরণ করে।

JIT কর্মপ্রবাহ

জেআইটি আর্কিটেকচার
চিত্র 4. JIT ডেটা প্রবাহ।
  • প্রোফাইলিং তথ্য কোড ক্যাশে সংরক্ষণ করা হয় এবং মেমরির চাপে আবর্জনা সংগ্রহের শিকার হয়।
    • অ্যাপ্লিকেশানটি ব্যাকগ্রাউন্ডে থাকাকালীন নেওয়া একটি স্ন্যাপশটে সম্পূর্ণ ডেটা থাকবে (অর্থাৎ, জেআইটি করা হয়েছে এমন সবকিছু) এর কোনও গ্যারান্টি নেই৷
    • সবকিছু রেকর্ড করা হয়েছে তা নিশ্চিত করার কোন প্রচেষ্টা নেই (কারণ এটি রানটাইম কর্মক্ষমতা প্রভাবিত করতে পারে)।
  • পদ্ধতি তিনটি ভিন্ন অবস্থায় হতে পারে:
    • ব্যাখ্যা করা (ডেক্স কোড)
    • JIT সংকলিত
    • AOT সংকলিত
    যদি JIT এবং AOT কোড উভয়ই বিদ্যমান থাকে (যেমন বারবার ডি-অপ্টিমাইজেশনের কারণে), JITed কোড পছন্দ করা হয়।
  • ফোরগ্রাউন্ড অ্যাপের কর্মক্ষমতা প্রভাবিত না করে JIT চালানোর জন্য মেমরির প্রয়োজনীয়তা প্রশ্নে থাকা অ্যাপের উপর নির্ভর করে। বড় অ্যাপের জন্য ছোট অ্যাপের চেয়ে বেশি মেমরির প্রয়োজন হয়। সাধারণভাবে, বড় অ্যাপগুলি প্রায় 4 MB স্থির করে।

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 

দ্রষ্টব্য: এই কমান্ড স্থানীয় প্রোফাইল ডেটা ধরে রাখে।