ART জাস্ট-ইন-টাইম (JIT) কম্পাইলার বাস্তবায়ন করা

অ্যান্ড্রয়েড রানটাইম (এআরটি) কোড প্রোফাইলিং সহ একটি জাস্ট-ইন-টাইম (জেআইটি) কম্পাইলার অন্তর্ভুক্ত করে যা অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি চালানোর সাথে সাথে তাদের কর্মক্ষমতাকে ক্রমাগত উন্নত করে। 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
    

প্রোফাইল ডেটা সাফ করা হচ্ছে

প্রোফাইল ডেটা সাফ করতে এবং সংকলিত কোড সরাতে, নিম্নলিখিতটি চালান:

  • একটি প্যাকেজের জন্য:
    adb shell cmd package compile --reset my-package
    
  • সমস্ত প্যাকেজের জন্য:
    adb shell cmd package compile --reset -a